Comments: |
Гы. У меня такая фигня с Lua была. Я как-то Иерусалимскому пытался объяснить, что надо хранить undef'ы в таблицах, а не удалять ключи при присвоение им nil. Потому что бля суко стрёмно. Мне в ответ было заявлено, что нехуй тут, что я вам типа язык написал, а вы за своими undef'ами сами следите.
Слежу, чо... Вместо t = { 'name' => 'value' } приходится писать t = { 'key' = 'name', val = 'value' }, чтобы при t.val = nil осталось бы хоть какое-то воспоминание о том, что в этом месте что-то было...
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | January 2nd, 2015 - 03:28 am |
---|
| | | (Link) |
|
не, вот тут я с тобой не согласен. да заведи себе вместо nil уникальное значение, и присваивай его. делов-то.
From: | (Anonymous) |
Date: | January 2nd, 2015 - 09:05 pm |
---|
| | | (Link) |
|
а что плохого в nil (в частности, как значения в ассоциативном массиве)?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | January 3rd, 2015 - 04:51 am |
---|
| | | (Link) |
|
то, что в Lua nil там хранить нельзя. по техническим причинам.
From: | (Anonymous) |
Date: | January 3rd, 2015 - 07:59 pm |
---|
| | | (Link) |
|
стоп. из-за некоторых технических ограничений ты бросил D, при этом допускаешь их в Lua? разве то, что множество значений элементов массива не равно множеству значений обычной переменной того же типа не нарушает принцип наименьшего удивления?
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | January 3rd, 2015 - 08:04 pm |
---|
| | | (Link) |
|
в данном случае — нет. nil — это «ничего». буквально. если ключу присвоить «ничего» — то при попытке запросить этот ключ ты получишь «ничего». внизапна! как и при попытке запросить ключ, которого нет. поэтому присваивание ключу «ничего» равнозначно удалению. об этом написано в документации, это так и работает.
поебень, из-за которой я дампнул D, в документации не описана. зато описаны похожие случаи, и по логике вещей оно всё должно работать одинаково.
From: | (Anonymous) |
Date: | January 3rd, 2015 - 08:10 pm |
---|
| | | (Link) |
|
эм, я имел ввиду nil, как значение(value) nil, как ключ скорее не нужен
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | January 3rd, 2015 - 08:28 pm |
---|
| | | (Link) |
|
ну, тогда разговор про типы в языке с динамической типизацией вообще непонятен. nil — это тип nil, имеет ровно одно возможное значение: nil.
Пример.
mongo_remove({ collection = ‘user’, _id = self.user_id, })
Если ВНЕЗМАНО self.user_id = nil, то эта хуйня грохнет вю таблицу users. Да, Иерусалимский считает это багом драйвера Монги, а не Lua. А я считаю, что визуальное количество аргументов, передавайемых функции должно соответствовать их фактическу числу. Т.е. в описанном случае nil или undef (как в Перле) должен явно присутствовать в впередаваему таблице. Я жду, что это так, и когда мне гроют всю таблицу не спрсясь, я какбэ несколько удивляюсь. да, понятно, что этого можно избежать. Но почему в Perl та же функция различает null и undef, и не удалит ничего, а просто пролетит, как фанера над Парижем, а в Луа все такие умные, что аж тапки жмут?
Ещё раз, если я хочу удалить ключ из таблицы, я сделаю это руками. Например delete(table.key). Но я не хочу. Я хочу, чтобы он был, но имел значение indef или null на худой конец. А "уникальное значение" - это вообще бред. Например 0 - это тоже id. Могу, конечно, анписать = self.user_id or 0, я не гордый, но это блин ёбаный надмозг.
![[User Picture]](http://lj.rossia.org/userpic/197531/22349) | From: | ketmar |
Date: | January 4th, 2015 - 05:06 pm |
---|
| | | (Link) |
|
вообще-то, уникальное значение — это любое light userdata. или, например, пустая таблица. оно риальне уникальное.
а насчёт nil… вот нет в Lua undefined. вообще. об этом написано в документации, кто документацию игнорирует и хочет хуй знает чего — сам себе буратина. а nil — это «ничего». именно «ничего». хранить в таблице «ничего» никакого смысла нет.
я, в общем, понимаю твои претензии, но сам на стороне роберто. создай себе уникальное значение undef и радуйся. | |