为什么ioopen在moonscript中不起作用



Moonscript使用\来调用方法,所以有人可以向我解释为什么下面的代码不起作用:

> file = ioopen("mix.exs", "rb")
[string "tmp"]:1: calling 'open' on bad self (string expected, got table)

但是当你调用它来读取文件时,它会呢?

> fileread!
"Code.ensure_loaded?(Hex) and Hex.start

io.open函数期望获取字符串作为第一个参数,但ioopen(如 lua 本身中的io:open(实际上是将io表作为第一个参数传递。也就是说,它是一个方法调用。

ioopen("file", "mode")/io:open("file", "mode")io.open(io, "file", "mode")的句法糖。

这就是为什么fileread!在没有显式参数的情况下工作的原因,因为file作为第一个参数传递给read("file", "format")函数。

Moonscript 使用 调用方法

ab c, ... 转换为 a.b(a,c,...)

这在这里不起作用io.open因为它是一个静态函数(io.open(what,how)(,而不是成员(io.open(self,what,how)(。

你也不能在Lua中调用io:openio函数允许作为成员调用的唯一地方是当您想要读/写 STDIO 时。

但是当你调用它来读取文件时,它会呢?

您实际上仍在使用io.read但是File对象已io为元表索引,因此允许您通过file.read访问相同的函数,并且由于fileread!转换为file.read(file)因此它是一回事。


所以基本上答案归结为"因为io:open在 Lua 中不起作用"。

相关内容

  • 没有找到相关文章

最新更新