Ruby中括号的一些用法

Ruby中括号的一些用法,ruby,Ruby,我在网上发现了一个关于括号用法的例子,这对我来说并不自然: does = is = { true => 'Yes', false => 'No' } does[10 == 50] # => "No" is[10 > 5] # => "Yes" 有人能解释一下吗?{true=>'Yes',false=>'No'}是一个散列,所以做[10==50]==does[false]

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

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

有人能解释一下吗?

{true=>'Yes',false=>'No'}
是一个散列,所以
做[10==50]==does[false]
,也就是“No”。另一个例子也是如此。

第一行 此行初始化两个哈希值,
true
的值为
“Yes”
false
的值为
“No”
。请注意,它们实际上是内存中具有两个引用的同一个对象,因此它与

is = { true => 'Yes', false => 'No' }
does = is
is = { true => 'Yes', false => 'No' }
does =  { true => 'Yes', false => 'No' }
和我的不一样

is = { true => 'Yes', false => 'No' }
does = is
is = { true => 'Yes', false => 'No' }
does =  { true => 'Yes', false => 'No' }
第二线 计算
10==50
,该值为false,并用作哈希键,返回
“否”

第三行 同样,计算结果为true的
10>5
,并使用true作为散列键返回
“Yes”


请注意,这不是ruby上的新命令,方块只是访问散列值。

5]
=
为[true]
=
“是”
第一行是链式赋值。我真的不明白重点。基本上,您正在创建一个散列并将引用分配给
is
,然后将
is
的引用分配给
does
。所以有两个局部变量指向同一个散列对象


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

这就是为什么每个人都应该学习函数式编程,使这种事情变得非常明显,即使你不懂这种语言。这是一个Ruby问题。Ruby没有字典,它有散列,所以,不要说“
does
is
是字典”,因为它们不是。在其他语言中可能是这样,但在讨论Ruby、Perl和其他具有“哈希”而不是“字典”的语言时,您需要使用正确的方言。如果不这样做,你的答案就会显得很陌生,看起来你根本不懂英语。我不同意。“hash”这个词作为映射到值的键集合的术语完全是胡说八道。散列是散列函数输出的值。散列值是一个(重要的)实现细节,但不适合作为一个整体来描述数据结构。厨房里有烤箱,但我们并没有用烤箱这个词来形容用来做饭的房间。我们也不会将数据库称为联接。Ruby需要改变它的本地语言以匹配通用编程术语,而不是相反。另外,在Ruby 1.9+中,甚至不可能使用哈希表实现
哈希。您必须至少添加一个链表或使用其他数据结构。“第一行是一个链式赋值。我真的看不出这一点。”使
,而
指向同一事物类似于提供一个别名,为方法提供一个备用名称。它是语法上的糖分,用来帮助语句的流畅。有时说
,有时说
,在语法上更有意义。虽然这些都是有效的Ruby示例,但我一般不会这样写,因为正如您所知,它们非常简洁,往往会掩盖正在发生的事情。是的,它们是“深层魔法”,并且利用了有趣的布尔技巧,但是它们在Ruby编码中并不合适,因为Ruby代码应该更具可读性。在Perl或C中,您会看到编写的类似内容,人们通常会选择布尔学习而不是可读/可维护,因为他们认为这会使代码运行得更快。
is[10 > 5]  # => "Yes"