Есть ли название для языковой функции, которая позволяет присваивать / создавать? - PullRequest
1 голос
/ 30 марта 2010

Это немного сложно сформулировать, но в PHP вы можете сказать что-то вроде:

$myArray['someindex'] = "my string";

и если индекс с таким именем не существует, он создаст / присвоит значение, а если есть индекс, он перезапишет существующее значение.

Сравните это с Javascript, где сегодня мне приходилось делать такие проверки:

if (!myObject[key]) myObject[key] = "value";

Я знаю, что это может показаться немного примечательным, но есть ли название способности PHP (и многих других языков) выполнять эти проверки самостоятельно, в отличие от более многословного (читай: PITA) метода JavaScript?

EDIT

Я запутался, спросив это. Допустим, вы хотите добавить в эту структуру:

myobject = {
    holidays : {easter : {date : 4/20/2010,
                          religion : Christianity}
                holi : {date : 3/10/2010,
                        religion : hindu} 
}

У меня была проблема сегодня, когда я получал табличные данные, и я хотел поместить их в дерево вроде этого, создав объект.

Когда я запускал свои циклы, у меня были проблемы с созданием НОВЫХ индексов, таких как myobject['holidays'][thisVariable][date] = 4/20/2010, если дерево в основном не было построено к этому моменту.

Я возьму пример кода с моего другого компьютера, если это не ясно, извините за плохое мышление.

Ответы [ 3 ]

6 голосов
/ 30 марта 2010

Вы ошибаетесь. Чтобы назначить значение ключу объекта в javascript, вам не нужно выполнять эту проверку. Значение будет присвоено независимо от того, имеется ли уже значение для этой клавиши или нет.

Подумай об этом. Как вы могли бы получить значения в объекте или хэше, если вам сначала нужно было получить значение там?

4 голосов
/ 30 марта 2010

Я бы предположил, что 'auto-vivification' http://en.wikipedia.org/wiki/Autovivification от Perl может быть уместным, но он работает иначе, чем вы описали На вики-странице есть хорошее резюме. Другие языки, такие как Ruby, поддерживают хук «действие по умолчанию» для хеш-ключей, которые не были назначены, что также может быть использовано для автовеласовки.

Например, в Ruby:


>> h = Hash.new {|h,k| h[k] = {}}
=> {}
>> h["hello"]["world"] = 20
=> 20
>> h["hello"]["world"]
=> 20

1 голос
/ 30 марта 2010

Javascript делает в точности то же самое, что и PHP: myObject [key] = "value" перезапишет существующее значение, если оно существует. Можете ли вы сказать нам, почему вы думаете иначе?

...