"22" 2.to_s *2 # -6ren">
gpt4 book ai didi

Ruby to_s 转换为二进制(参数中的 Splat 运算符)

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

如果我运行以下代码,前两行会返回我所期望的结果。然而,第三个返回 2 的二进制表示。

2.to_s      # => "2"
2.to_s * 2 # => "22"
2.to_s *2 # => "10"

我知道在调用 to_s 时传入 2 会将我的输出转换为二进制,但为什么 to_s 忽略第三个中的 *案件?如果有任何不同,我正在运行 Ruby 1.9.2。

最佳答案

对,正如 Namida 已经提到的,Ruby 解释

2.to_s *2

作为

2.to_s(*2)

因为方法调用中的圆括号在 Ruby 中是可选的。这里的星号就是所谓的splat operator .

这里唯一令人费解的问题是为什么 *2 的计算结果为 2。当您在方法调用之外使用它时,splat 运算符会将所有内容强制转换为数组,这样

a = *2

将导致 a 成为 [2]。在方法调用中,splat 运算符做相反的事情:将任何东西解包为一系列方法参数。传递给它一个三成员数组,它将作为三个方法参数的结果。将标量值传递给它,它将作为单个参数转发。所以,

2.to_s *2

本质上与

相同
2.to_s(2)

关于Ruby to_s 转换为二进制(参数中的 Splat 运算符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12669323/

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