Ruby中隐式哈希创建不一致?

时间:2010-05-15 01:43:19

标签: ruby arrays syntax hash

好的,所以我将自己DSL中的一些东西与Ruby进行了比较。他们都支持的一个结构就是这个

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

知道数组和散列之间的区别,我认为这是非法的,但Ruby中的结果是

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

这是为什么?有了这种语法,你为什么不能这样做

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

为什么数组是隐式创建哈希的特例?

3 个答案:

答案 0 :(得分:2)

另一个特例是在函数调用中,考虑:

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

所以在某些情况下,可以隐式构建哈希(通过检测=>运算符?)。我想答案就是这是Matz最不令人惊讶的行为。

答案 1 :(得分:2)

由于隐式哈希创建明显不一致,ruby在这方面实现了一致性:

func(whatever...)

始终可以替换为:

args = [whatever...]
func(*args)

您可以在参数列表和数组之间进行转换,因此它们具有相同的语法是合乎逻辑的。

答案 2 :(得分:0)

我会说翻译人员指出“key”=> “value”是一个哈希值,就像你将它放入一个数组时的5是一个数字一样。
所以,如果你写:

x = [5]

解释器不会认为它是一个字符串,并返回:

x = ["5"]

在某些情况下,ruby似乎隐式地创建了哈希值。