我在网上找到了一个关于括号用法的示例,这对我来说并不自然:
does = is = { true => 'Yes', false => 'No' }
does[10 == 50] # => "No"
is[10 > 5] # => "Yes"
有人可以解释一下吗?
我在网上找到了一个关于括号用法的示例,这对我来说并不自然:
does = is = { true => 'Yes', false => 'No' }
does[10 == 50] # => "No"
is[10 > 5] # => "Yes"
有人可以解释一下吗?
does = is = { true => 'Yes', false => 'No' }
此行初始化两个哈希值,其中true
is 的值和 is的"Yes"
值。注意它们实际上是内存中的同一个对象,有两个引用,所以它是相同的false
"No"
is = { true => 'Yes', false => 'No' }
does = is
和不一样的
is = { true => 'Yes', false => 'No' }
does = { true => 'Yes', false => 'No' }
does[10 == 50] # => "No"
评估10 == 50
,这是错误的,并用作哈希键,返回"No"
。
is[10 > 5] # => "Yes"
同样的事情,评估10 > 5
结果为真,并使用 true 作为它返回的哈希键"Yes"
请注意,这不是 ruby 上的新命令,方块只是访问哈希值。
{ true => 'Yes', false => 'No' }
是一个哈希,所以does[ 10 == 50 ] == does[false]
,这是'否'。另一个例子也一样。
5<10
是一个布尔表达式,所以这将返回true
or false
。
does
并且is
是字典(在 Ruby-speak 哈希中)。这些字典的键是真假。值为“是”和“否”。
所以,is[ 10 > 5 ]
= is[true]
="Yes"
第一行是一个链式赋值。我真的不明白这一点。基本上,您正在创建一个哈希并分配一个引用is
,然后将引用分配给is
to does
。所以你有两个局部变量指向同一个哈希对象。
第二行和第三行是计算值的表达式,然后用于查找。10 不等于 50,所以这被评估为假。False 是散列中值为“no”的键。10 大于 5,因此它评估为 true,这也恰好是一个值为“是”的键。