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

好的,我将我自己的DSL中的一些东西与Ruby比较。 他们都支持的一个构造就是这样

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

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

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

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

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

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


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

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

因此,在某些情况下,可以隐式构建Hashes(通过检测=>运算符?)。 我想答案只是这是马茨最不出奇的行为。


在隐式哈希创建中这种明显的不一致性,ruby在这方面达到了一致性:

func(whatever...)

总是可以用以下代替:

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

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


我会说解释者会发现“key”=>“value”是一个散列,就像它将数字5放入一个数组时一样。
所以如果你写:

x = [5]

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

x = ["5"]

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

链接地址: http://www.djcxy.com/p/45923.html

上一篇: Inconsistent implicit hash creation in Ruby?

下一篇: Given a linked list of numbers. Swap every 2 adjacent links