Перейти к содержимому
  • 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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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

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


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

Fingercomp, можно таким образом оформить свои программы, чтобы читая их, никому не было понятно, что они делают)

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


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

Fingercomp, можно таким образом оформить свои программы, чтобы читая их, никому не было понятно, что они делают)

Это вряд ли. Кто-то всё равно разберётся в особенностях твоего кода, если программа достаточно ценна. А если она бесполезна, то вчитываться в её код и так мало желающих. Бесполезность программы является лучшей защитой от чтения кода.

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


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

Над шифровкой программ давно уже думали. Как вариант это применять какой-то сложный алгиритм преобразования и порциями загружать в оперативку через load. Но всеравно, отледить и дешифровать можно.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
14.01.2019 в 21:23, Asior сказал:

Над шифровкой программ давно уже думали. Как вариант это применять какой-то сложный алгиритм преобразования и порциями загружать в оперативку через load. Но всеравно, отледить и дешифровать можно.

Жаль байткоды отключены у load, байткоды мало кто использует

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


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

Жаль байткоды отключены у load, байткоды мало кто использует

Байткод тоже можно преобразовать в исходный. Правда, с потерей комментариев и локальных названий. Но даже такой может иметь ценность.

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


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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...