在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