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

Метатаблицы, Lua

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

Обновил и добавил про математические метаметоды.

  • Like 1

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


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

 

 

Немного странный результат у последнего примера, правда?   Попробуйте это объяснить.

 

 

--Если первый аргумент - таблица, то присваиваем ему значение 42, иначе его изначальное значение
 

Шутишь?

---

Ме-та-та-бли-бли-бли-цы - уж-жасное название. Еще ужаснее конструкции вида:

 

 

 при работе с метатаблицами, она устанавливает таблице метатаблицу. Первый аргумент здесь — таблица, второй — метатаблица

 

Прочитал, теперь заикаюсь.

 

Материал хорош, и грамотен, но та-та-та-блицы с ме-ме-ме-та-методами нужно подавать проще и другими словами.

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


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

 

Шутишь?

---

Ме-та-та-бли-бли-бли-цы - уж-жасное название. Еще ужаснее конструкции вида:

 

 

 

Прочитал, теперь заикаюсь.

 

Материал хорош, и грамотен, но та-та-та-блицы с ме-ме-ме-та-методами нужно подавать проще и другими словами.

 

Оно вроде как и .. ты прав ... но ... из песни слов не выкинешь. Чем думаешь заменить валийское  metatable.Каким словом из русского языка? Чтобы звучало - просто, понятно и правильно.

Изменено пользователем davial

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


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

Оно вроде как и .. ты прав ... но ... из песни слов не выкинешь. Чем думаешь заменить валийское  metatable.Каким словом из русского языка? Чтобы звучало - просто, понятно и правильно.

о-себе-таблица)))

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


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

Да, термин "таблица" рябит в глазах, особенно если это замечаешь.

 

Однако, на мой взгляд, в статье на подобную тему это неизбежно. И уж тем более не стоит заменять термин "метатаблица" на неологизм собственного сочинения, вводя в заблуждение читающих статью новичков.

 

  • setmetatable(tabletable) — эта основная функция при работе с метатаблицами, она устанавливает таблице метатаблицу. Первый аргумент здесь  таблица, второй  метатаблица. Такая функция работает только с таблицами.

 

Можно использовать синтаксис описания команд, подобный тому, что можно увидеть на http://ocdoc.cil.li/

И переформулировать фразы немного, чтобы избежать излишней тавтологии.

 

  • setmetatable(table: table, metatable: table) — это основная функция, которая позволяет установить таблице метатаблицу.

 

Т.е. тип аргументов и какой идет куда, становится понятно из сигнатуры.

Изменено пользователем Totoro

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


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

Наверное следует упомянуть, что __index и __newindex могут быть не только методами, но и таблицами. На счет остальных заклинаний не уверен.

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


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

Наверное следует упомянуть, что __index и __newindex могут быть не только методами, но и таблицами. На счет остальных заклинаний не уверен.

Но я упоминал об этом.

Да, термин "таблица" рябит в глазах, особенно если это замечаешь.

 

Однако, на мой взгляд, в статье на подобную тему это неизбежно. И уж тем более не стоит заменять термин "метатаблица" на неологизм собственного сочинения, вводя в заблуждение читающих статью новичков.

 

 

Можно использовать синтаксис описания команд, подобный тому, что можно увидеть на http://ocdoc.cil.li/

И переформулировать фразы немного, чтобы избежать излишней тавтологии.

 

 

Т.е. тип аргументов и какой идет куда, становится понятно из сигнатуры.

Переделаю, так действительно будет лучше.

  • Like 3

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


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

Однако, на мой взгляд, в статье на подобную тему это неизбежно. И уж тем более не стоит заменять термин "метатаблица" на неологизм собственного сочинения, вводя в заблуждение читающих статью новичков.

 

Тут как раз "метатаблица" и есть неблагозвучный калькированный с английского неологизм.

 

Если бы документацию писали, а не переводили, то термин скорее всего был бы "суб-таблица" или составной, но более точный по сути "таблица операторов". А в случае с __index и __newindex было бы оговорено, что в качестве таблицы операторных методов может выступать обычная таблица индексов-значений.

 

ЗЫ

"метаметод" - тоже, еще та корявость ) мета-метод это как?

Изменено пользователем swg2you

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


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

Тут как раз "метатаблица" и есть неблагозвучный калькированный с английского неологизм.

 

Если бы документацию писали, а не переводили, то термин скорее всего был бы "суб-таблица" или составной, но более точный по сути "таблица операторов". 

 

Немного не соглашусь.

У неологизма "метатаблица" есть как минимум пара преимуществ, по сравнению с другими вариантами.

Первое - он широко распространен (в контексте Луа). Как в английском так и в русском языке.

Второе - это наиболее точный перевод термина "metatable" на русский. То что перевод так похож на оригинал - лишь облегчает понимание мануалов.

Так что тут уже все решено за нас создателями языка.

 

Термин "суб-таблица" возможно прижился бы. Но он звучит менее определенно. "Под-таблица". Это таблица-элемент? Таблица операторов? Или что-то еще?

Приставка "мета-" носит в русском языке (хотя она несомненно иностранного происхождения) смысл абстрактности и обобщенности. Что вполне подходит к случаю, на мой взгляд.

  • Like 2

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


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

Немного не соглашусь.

У неологизма "метатаблица" есть как минимум пара преимуществ, по сравнению с другими вариантами.

Первое - он широко распространен (в контексте Луа). Как в английском так и в русском языке.

Второе - это наиболее точный перевод термина "metatable" на русский. То что перевод так похож на оригинал - лишь облегчает понимание мануалов.

Так что тут уже все решено за нас создателями языка.

 

Термин "суб-таблица" возможно прижился бы. Но он звучит менее определенно. "Под-таблица". Это таблица-элемент? Таблица операторов? Или что-то еще?

Приставка "мета-" носит в русском языке (хотя она несомненно иностранного происхождения) смысл абстрактности и обобщенности. Что вполне подходит к случаю, на мой взгляд.

мета- из греческого "рядом с" перекочевало как приставка в английский и русский, и укоренилось в узких значениях: на другом уровне, выше, ниже, после, между.

Мета-фора, мета-язык, мета-физика, и т.п.

 

А насчет распространенности это да. Мы любим кальку. Большая часть слов в современном Русском - заимствованы.

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


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

Обновил и добавил про метаметоды сравнения. Возможно потом, что-то ещё буду дописывать, но скорее нет. Вроде описал все поля, используемые в метатаблицах. Но если что-то забыл, пишите.

  • Like 2

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


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

Наверное следует упомянуть, что __index и __newindex могут быть не только методами, но и таблицами. На счет остальных заклинаний не уверен.

Еще может быть __call, если ее саму можно вызвать

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


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

Еще может быть __call, если ее саму можно вызвать

Нет, я проверил в Lua интерпритаторе, и твоё предположение на счёт __call не работает.

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


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

Жаль, по логике должно работать(если ты проверял в интерпритаторе на сайте - он кривой)

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


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

Жаль, по логике должно работать(если ты проверял в интерпритаторе на сайте - он кривой)

Я проверял не на сайте, а в официальном интерпритаторе от создателей языка программирования. Версия - Lua 5.3, если что.

 

P.S. Утренняя переписочка

Изменено пользователем Ktlo

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


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

Тема обновлена

Добавлены математический метаметод __idiv() и метаметоды для битовых операторов.

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


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

Это что за оператор?  В Луа 5.2 не работает.

В Lua 5.3 его добавили. До этого такого не было.

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


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

Жаль что не пашет(

Что-то вы все не так делаете. У меня на интерпретаторе Lua 5.1 все норм пашет. В Lua 5.2 тоже должно - ведь работает же в OpenComputers такое, да? С Lua 5.3 тоже самое. 

 

P. S. Теперь я понял. Оказывается, у меня тоже не работает. Хотя, можно это все обернуть в функцию:

t={}
pseudofunctionTable=setmetatable({},{__call=function(self,...) print("it works!",...) end})
mt={__call=function(self,...) pseudofunctionTable(...) end}
setmetatable(t,mt)
t("and this is cool.")
Изменено пользователем TC1061

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


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

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

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

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

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

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

Войти

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

Войти сейчас

×