Перейти к содержимому
  • 0
Asior

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

Вопрос

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

local component = require'component'

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

local component = require('component')

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


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

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

Прекрасно работает. 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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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


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

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

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

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


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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
В 24.08.2018 в 23:07, Fingercomp сказал:

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


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)
})

 

 

 

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

какой наыиг класс? в lua есть обекты но классов нет

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


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

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

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

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

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

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

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

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

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


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