我在网上找到了一个例子,对于括号用法来说,这对我来说并不自然:
does = is = { true => 'Yes', false => 'No' }
does[10 == 50] # => "No"
is[10 > 5] # => "Yes"
有人可以解释一下吗?
答案 0 :(得分:11)
does = is = { true => 'Yes', false => 'No' }
此行初始化两个哈希值,其中true
的值为"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上的新命令,方块只是访问哈希值。
答案 1 :(得分:1)
{ true => 'Yes', false => 'No' }
是一个哈希,所以does[ 10 == 50 ] == does[false]
是'否'。另一个例子也一样。
答案 2 :(得分:0)
5<10
是一个布尔表达式,因此会返回true
或false
。
does
和is
是字典(在Ruby中说哈希)。这些词典的关键是真实的和错误的。
值为“是”和“否”。
所以,is[ 10 > 5 ]
= is[true]
= "Yes"
答案 3 :(得分:-1)
第一行是链式作业。我真的没有看到这一点。基本上,您正在创建哈希并为is
分配引用,然后将is
的引用分配给does
。所以你有两个局部变量指向同一个哈希对象。
第二行和第三行是对值进行评估的表达式,然后用于查找。 10不等于50,所以这评估为假。 False是散列中的键,值为“no”。 10大于5,因此它评估为真,这也恰好是一个值为“是”的键。