Перейти к публикации
Форум - ComputerCraft
  • 0
Asior

Допустим ли вызов функции без круглых скобок?

Вопрос

У меня тут вопрос возник, а этот фрагмент кода вообще работает

local component = require'component'

Просто как-то привык что всегда вызывается в скобках

local component = require('component')

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендованные сообщения

  • 0

Прекрасно работает. Cинтаксис Lua разрешает не заключать в скобки единственный параметр функции, являющийся строковым литералом или конструктором таблицы.

 

Пруф: http://www.lua.org/manual/5.2/manual.html#3.4.9

 

Записи вида f'string', f"string" и f[[string]] эквивалентны f('string').

Аналогично и для конструкторов таблиц: f{fields} эквивалентно f({fields})

Изменено пользователем eu_tomat
  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Это есть наиполезнейшая штука, чтобы творить жутчайшей степени норкоманию. Особенно вместе с метаметодами. Например:

rule(public) { every "10 seconds" } (function(state)
  state.counter = state.counter + 1
end)

Раскрывается оно в это:

 

 

rule(public)({every("10 seconds")})(function(state)
  state.counter = state.counter + 1
end)

 

 

 

Не знаю, где такое в принципе может пригодиться, но такая крайняя эволюция идеи о Fluent interface меня в последнее время сильно забавляет. Так можно на базе Lua запилить и какой-нибудь миниязык даже.

class [[public static]] "What" {
  member [[public static]] "main" (throws "IOException") (function()
    throw(new "IOException"("what."));
  end);
}

И раскрытие:

 

 

class("public static")("What")({
  member("public static")("main")(throws "IOException")(function()
    throw(new("IOException")("what."))
  end)
})

 

 

 

Неясен тут только смысл.

Изменено пользователем Fingercomp
  • Like 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×