Ruby中括号的一些用法

时间:2013-04-29 14:57:13

标签: ruby

我在网上找到了一个例子,对于括号用法来说,这对我来说并不自然:

does = is = { true => 'Yes', false => 'No' }
does[10 == 50]                       # => "No"
is[10 > 5]                           # => "Yes"

有人可以解释一下吗?

4 个答案:

答案 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是一个布尔表达式,因此会返回truefalse

doesis是字典(在Ruby中说哈希)。这些词典的关键是真实的和错误的。 值为“是”和“否”。

所以,is[ 10 > 5 ] = is[true] = "Yes"

答案 3 :(得分:-1)

第一行是链式作业。我真的没有看到这一点。基本上,您正在创建哈希并为is分配引用,然后将is的引用分配给does。所以你有两个局部变量指向同一个哈希对象。

第二行和第三行是对值进行评估的表达式,然后用于查找。 10不等于50,所以这评估为假。 False是散列中的键,值为“no”。 10大于5,因此它评估为真,这也恰好是一个值为“是”的键。