LINUX.ORG.RU

Переменная с двойным дном

 ,


0

2

Можно ли в lua реализовать поведение переменой, при котором простое обращение к ней

print( a )
даёт её значение, а обращение к полю
print( a.b ) -- или print(a[b])
возвращает требуемое значение?

Можно воспользоваться __call'ом, приписав скобки

print( a() )
Как без скобок?

зыж По мотивам того, как userfriendly-ведомые разработчики awesome wm вместо keycode бросают в keygrabber просто символ.



Последнее исправление: dann (всего исправлений: 1)

простое обращение к ней даёт её значение, а обращение к полю возвращает требуемое значение?

У меня из-за тебя голова заболела.

buddhist ★★★★★
()

Это такое ололо, что страшно представить, зачем оно тебе.

anonymous
()

Вроде бы нет. Оно всегда возвращает ссылку на таблицу с данными в памяти.

Эм, запости тот кусок кода, я его найти не могу.

frozenix ★★★
()
Последнее исправление: frozenix (всего исправлений: 1)

Хотя при вызове print(a) вызывается какая-то метод из А, который преобразовает в строку.

frozenix ★★★
()
Ответ на: комментарий от frozenix

Пропертис аццтой, перегрузка операций наш все!

AIv ★★★★★
()
Ответ на: комментарий от aol

вот я и хотел узнать, как он собирался это делать :)

frozenix ★★★
()
Ответ на: комментарий от buddhist

ну... поздно лёг, рано встал)

dann
() автор топика
Ответ на: комментарий от Medar

Работают. Хочу различать, скажем, минусы: на Num Pad'e и рядом с нолём.

dann
() автор топика
Ответ на: комментарий от frozenix

Да нет, внутрь lua я не лазил. Знаю что есть __call, __index и проч., и они достаточно занятно менят поведение таблиц. Отсюда и вопрос: не ли такого (мета(?))метода, который указанным образом менял бы поведение?

dann
() автор топика
Ответ на: комментарий от frozenix

Хотя, если делаешь для своей ф-ции то можно.

Например определить
function a.b.__getter ...
а в своей функции делать так
function myfunc(obj) obj.__getter

frozenix ★★★
()
Ответ на: комментарий от dann

Тебе чего надо-то? Чтобы «а» возвращало «Вася», а «а.б» возвращало «Петя», так что-ли? Ставь setmetatable на _G и возвращай прокси-объекты, которые ведут себя как строки или числа при выводе и/или арифметике, а на самом деле объекты. А вообще идиотская задачка с кучей кавеатов.

anonymous
()
Ответ на: комментарий от dann

Пардон, я как-то проглядел что речь о Awesome идет :)

urxvt ★★★★★
()

Задай __tostring в метатаблице a

annulen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.