Перейти к публикации
Новости
  • В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами
  • Новости
  • 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

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


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

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

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


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

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

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

  • Like 1

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


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

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

  • Like 1

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


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

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

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

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


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

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

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

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


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

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

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

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

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

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

Войти

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

Войти сейчас

×