["foo", 1, "bar", 2] Ha-6ren">
gpt4 book ai didi

ruby - Ruby 语法糖有 "rules"吗?

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:03 24 4
gpt4 key购买 nike

我正在学习 Ruby 的基础知识(刚刚开始),我遇到了 Hash.[] method .它被引入

a = ["foo", 1, "bar", 2]
=> ["foo", 1, "bar", 2]
Hash[*a]
=> {"foo"=>1, "bar"=>2}

稍加思索,我发现 Hash[*a] 等同于 Hash.[](*a)Hash.[] *一个。我的问题是为什么会这样。是什么让您将 *a 放在方括号内,是否有某种规则可以在何时何地使用“it”?

编辑:我的措辞似乎造成了一些困惑。我不是在问数组扩展。我明白了。我的问题基本上是:如果 [] 是方法名称,为什么可以将参数放在括号内?这看起来几乎——但不完全是——就像说如果你有一个方法 Foo.dood,并且你想将字符串 "hey" 传递给它,那么你可以写成 Foo.do"hey"od

最佳答案

Hash["a", "b", "c", "d"] 等同于 Hash.[]("a", "b", "c", "d")。 Ruby 中几乎所有的东西都是方法调用。 5 + 5 等同于 5.+(5)

给定 a = ["a", "b", "c", "d"] Hash[*a] 等价于 Hash[ "a", "b", "c", "d"],这又等同于 Hash.[]("a", "b", "c", "d")。类似地,foo(*a) 等同于 foo("a", "b", "c", "d") 这称为爆炸运算符,并且允许将数组发送到方法并将数组中的每个项目计为方法的一个参数,而不是将数组作为第一个参数发送到方法。


为了专门回答您的更新,没有什么特别的可以让您将 *a 放在括号内。方括号只是普通方法调用的糖分。这里唯一“特别”的地方是您可以将 *a 发送到任何方法。

关于ruby - Ruby 语法糖有 "rules"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7705693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com