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

标签 ruby ruby-1.9.2 splat

如果我运行以下代码,前两行会返回我所期望的结果。然而,第三个返回 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/

相关文章:

ruby-on-rails - 保持代码干燥的方法

c - 传入 char *argv[] 和声明 char *argv 有什么不同?

Ruby 对象与 Fixnum 相当

ruby-on-rails - 如何为 UTF-8 字符串编写带有大引号的 gsub?

ruby-on-rails - 如何在数据库中存储当前日期当前时间

ruby - 使用splat捕获错误不起作用

ruby - 如何找到最大值hash的key?

activerecord - 如何使用 ruby​​ activerecord 查询选择单列

python - 您可以将关键字参数扩展与常规关键字参数结合使用吗?

Ruby Koans 关于消息传递 "send" block 和参数