Непоследовательное неявное создание хеша в Ruby?

Хорошо, таким образом, я сравнивал некоторый материал в своем собственном DSL к Ruby. Одна конструкция они оба поддержка является этим

x=["key" => "value"]

Зная различие между массивами и хешами, я думал бы, что это недопустимо, но результат в Ruby

[{"key" => "value"}]

Почему это? И с этим видом синтаксиса, почему Вы не можете сделать

x=("key" => "value") 

Почему массив является особым случаем для неявно созданных хешей?

8
задан Earlz 15 May 2010 в 08:24
поделиться

2 ответа

Другой особый случай - вызов функции, учтите:

def f(x)
  puts "OK: #{x.inspect}"
end
f("foo" => "bar")
=> OK: {"foo"=>"bar"}

Таким образом, в некоторых контекстах хэши могут быть построены неявно (путем обнаружения = > оператор?). Я полагаю, ответ заключается в том, что это было наименее удивительным поведением Маца.

2
ответ дан 6 December 2019 в 00:05
поделиться

Я бы сказал, что интерпретатор понимает, что "ключ" => "значение" - это хэш, точно так же, как он понимает, что 5 - это число, когда вы помещаете его в массив.
Так что если вы напишете:

x = [5]

Интерпретатор не будет думать, что это строка, и вернет:

x = ["5"]

Похоже, что ruby неявно создает хэши в некоторых случаях.

0
ответ дан 6 December 2019 в 00:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: