我正在学习Ruby的基础知识(刚刚开始),我遇到了这个Hash.[]
方法.它被引入
a = ["foo", 1, "bar", 2]
=> ["foo", 1, "bar", 2]
Hash[*a]
=> {"foo"=>1, "bar"=>2}
Run Code Online (Sandbox Code Playgroud)
经过一番思考,我发现这Hash[*a]
相当于Hash.[](*a)
或Hash.[] *a
.我的问题是为什么会这样.究竟是什么让你把*a
方括号里面,是有某种规则对何时何否则"它"可以用吗?
编辑:我的措辞似乎引起了一些混乱.我不是在询问阵列扩展.我明白了.我的问题基本上是:如果[]
是一个方法名称,为什么可以在括号内放置参数?看起来差不多 - 但不完全 - 就像说如果你有一个方法Foo.dood
,并且你想把字符串传递"hey"
给它,那么你就可以写了Foo.do"hey"od
.
ruby 允许您以特殊方式调用几种方法。这些是[]
您提到的、其他人提到的、、+
等。另一个重要的例子是可以调用并允许您创建访问器的表单方法。-
==
something=(value)
object.something = value
编辑:
有趣的事实 1:如果您定义了一个+
方法,您就可以+=
免费获得。
有趣的事实 2:如果您定义了 a,<=>
您将获得所有比较方法,由Comparable提供