Size: a a a

2020 April 22

A

Ameliance SkyMusic in pro.lua
Snusmumriken
Нет, setmetatable не добавляет ключи в детей-подчинённых. Там хитрая схема, метатаблица не оставляет видимых следов.
как же я могу тогда отображать ключи детей, изменять их не влияя на родителей?
источник

S

Snusmumriken in pro.lua
Изменять ключи родителей — например вот так
getmetatable(Child).__index.c = 20
Или сразу:
Parent.c = 20
источник

A

Ameliance SkyMusic in pro.lua
я имею в виду если родитель не добавляет ключей с ,то как я могу его менять у детеныша, если у него нет ключа с
источник

S

Snusmumriken in pro.lua
Ты добавишь ключ в ребёнка, и больше не получишь доступ к ключу родителя.
источник

S

Snusmumriken in pro.lua
Перекрывание такое.
источник

A

Ameliance SkyMusic in pro.lua
то есть если я вызову из метатаблицы ключ от родителя, то после изменения он перелетит к детёнышу?
источник

S

Snusmumriken in pro.lua
Нет ))
источник

A

Ameliance SkyMusic in pro.lua
ух...😅
источник

S

Snusmumriken in pro.lua
Если ты укажешь детёнышу такой же ключ — родительский не изменится, и ты потеряешь к нему доступ из ребёнка, разве что через getmetatable его можно будет получить.
источник

S

Snusmumriken in pro.lua
parent = {key1 = 10, key2 = 20}
child = {key1 = 30}

setmetatable(child, {__index = parent})

print(child.key1) --> 30 -- свой
print(child.key2) --> 20 -- родительский

parent.key2 = 50 -- меняем родительский
print(child.key2) --> 50 -- ребёнок адаптируется

-- добавляем поле с тем же именем к ребёнку
child.key2 = 100 -- теряем доступ к родительскому
print(child.key2) --> 100 -- свой
print(parent.key2) --> 50

-- child = {key1 = 30, key2 = 100}
-- parent = {key1 = 10, key2 = 50}
источник

S

Snusmumriken in pro.lua
Ничего никуда не летает. Но если ты вручную добавляешь ключ ребёнку (child.key2 = 100) — ребёнок перестаёт искать его у родителя: у него появился свой ключ, ему теперь незачем его искать у родителя. Но все остальные отсутствующие ключи будут продолжать искаться у родителя.
источник

A

Ameliance SkyMusic in pro.lua
источник

S

Snusmumriken in pro.lua
Вот да, близко.
источник

A

Ameliance SkyMusic in pro.lua
так почему меняется у дитеныша, если у него нет этого ключа, а он ищет его у родителя всегда?
источник

S

Snusmumriken in pro.lua
Ну ды ))
Нет ключа — ищем по __index. Оно же не копируется, а типа одалживается у родителя.
источник

A

Ameliance SkyMusic in pro.lua
Snusmumriken
Ну ды ))
Нет ключа — ищем по __index. Оно же не копируется, а типа одалживается у родителя.
а, стоп...
источник

A

Ameliance SkyMusic in pro.lua
не, не стоп
источник

A

Ameliance SkyMusic in pro.lua
что тут происходит?
как он меняет свой ключ (которого нет), который он ищет у родителя, но с тем же самым родительский остается таким каким и был
источник

S

Snusmumriken in pro.lua
А ты смотри что в функции turn_off ))
Он добавляет себе ключ и значение. Не родителю, а себе.
источник

A

Ameliance SkyMusic in pro.lua
источник