Перейти к публикации
  • 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, байткоды мало кто использует

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

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


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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

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

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

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

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

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


×