Есть ли название для языковой функции, которая позволяет присваивать / создавать?
Это немного сложно для меня, но в PHP вы можете сказать что-то вроде:
$myArray['someindex'] = "my string";
и если нет индекса с таким именем, он создаст / присвоит значение, а если есть индекс, он перезапишет существующее значение.
Сравните это с Javascript, где сегодня мне приходилось делать такие проверки:
if (!myObject[key]) myObject[key] = "value";
Я знаю, что это может показаться немного придирчивым, но есть ли название способности PHP (и многих других языков) выполнять эти проверки самостоятельно, в отличие от более многословного (читай: PITA) метода Javascript?
РЕДАКТИРОВАТЬ
Я запутался, спросив это. Допустим, вы хотите добавить в эту структуру:
myobject = {
holidays : {easter : {date : 4/20/2010,
religion : Christianity}
holi : {date : 3/10/2010,
religion : hindu}
}
У меня была проблема сегодня, когда я получал табличные данные, и я хотел поместить их в дерево вроде этого, создав объект.
Когда я начал свои петли, у меня были проблемы с созданием новых индексов, таких как myobject['holidays'][thisVariable][date] = 4/20/2010
если бы дерево в основном не было построено до этого момента.
Я возьму пример кода с моего другого компьютера, если это не ясно, извините за плохое мышление.
3 ответа
Я бы предположил, что "авто-вивификация" 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
Вы ошибаетесь. Чтобы назначить значение ключу объекта в javascript, вам не нужно выполнять эту проверку. Значение будет назначено вне зависимости от того, существует ли значение для этого ключа или нет.
Думаю об этом. Как вы могли бы получить значения в объекте или хэше, если вам сначала нужно было получить значение там?
Здесь Javascript делает то же самое, что и PHP: myObject[key] = "value" перезапишет существующее значение, если оно существует. Можете ли вы сказать нам, почему вы думаете иначе?