Перейти к содержимому
Ktlo

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

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

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

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


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

 

 

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

 

 

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

Шутишь?

---

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

 

 

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

 

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

 

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

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


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

 

Шутишь?

---

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

 

 

 

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

 

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

 

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

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

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


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

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

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

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


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

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

 

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

 

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

 

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

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

 

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

 

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

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

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


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

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

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


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

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

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

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

 

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

 

 

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

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

 

 

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

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

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


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

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

 

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

 

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

 

ЗЫ

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

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

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


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

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

 

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

 

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

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

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

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

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

 

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

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

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


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

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

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

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

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

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

 

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

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

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

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

 

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

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


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

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

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


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

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

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

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


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

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

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

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


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

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

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


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

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

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

 

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

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

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


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

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

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

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


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

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

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

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


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

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

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

Гость
Ответить в тему...

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

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

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

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

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


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