2

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

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

有人可以解释一下吗?

4

4 回答 4

11

第一行

does = is = { true => 'Yes', false => 'No' }

此行初始化两个哈希值,其中trueis 的值和 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​​ 上的新命令,方块只是访问哈希值。

于 2013-04-29T15:01:27.683 回答
1

{ true => 'Yes', false => 'No' }是一个哈希,所以does[ 10 == 50 ] == does[false],这是'否'。另一个例子也一样。

于 2013-04-29T14:58:50.350 回答
0

5<10是一个布尔表达式,所以这将返回trueor false

does并且is是字典(在 Ruby-speak 哈希中)。这些字典的键是真假。值为“是”和“否”。

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

于 2013-04-29T15:01:35.837 回答
-1

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

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

于 2013-04-29T15:02:30.927 回答