2015-02-12 2 views
1

Moonscript использует \ для вызова методов, так может кто-нибудь объяснить мне, почему ниже код не работает:Почему io open не работает в moonscript?

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

, но когда вы вызываете его прочитать файл, он делает?

> file\read! 
"Code.ensure_loaded?(Hex) and Hex.start 

ответ

3

io.open функция ожидает получить строку в качестве первого аргумента, но io\open (как io:open в самой Lua) фактически передавая io таблицы в качестве первого аргумента. То есть это вызов метода.

io\open("file", "mode")/io:open("file", "mode") являются синтаксическим сахаром для io.open(io, "file", "mode").

Именно поэтому file\read! работает без явного аргумента, потому что file передается в качестве первого аргумента функции read("file", "format").