为什么不是“重复”? * 3` 与 Ruby 中的 `3 * “重复”` 相同吗?
当我输入以下内容时:
puts 'repeat' * 3
我得到:
>> repeat repeat repeat
但如果我这样做,它就不起作用:
puts 3 * 'repeat'
为什么?
When I type this:
puts 'repeat' * 3
I get:
>> repeat repeat repeat
But it's not working if I do this:
puts 3 * 'repeat'
Why?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
在 Ruby 中,当您调用
a * b
时,您实际上是在调用a
上名为*
的方法。试试这个,例如:因此
; *
工作正常,因为String
上的*
方法了解如何处理整数。它通过将自身的多个副本连接在一起来做出响应。但是,当您执行
3 * "repeat"
时,它会使用String
参数调用Fixnum
上的*
。这是行不通的,因为Fixnum
的*
方法期望看到另一种数字类型。In Ruby, when you call
a * b
, you're actually calling a method called*
ona
. Try this, for example:Thus
<String> * <Fixnum>
works fine, because the*
method onString
understands how to handle integers. It responds by concatenating a number of copies of itself together.But when you do
3 * "repeat"
, it's invoking*
onFixnum
with aString
argument. That doesn't work, becauseFixnum
's*
method expects to see another numeric type.