为什么不是“重复”? * 3` 与 Ruby 中的 `3 * “重复”` 相同吗?

发布于 2024-08-27 05:59:39 字数 211 浏览 6 评论 0原文

当我输入以下内容时:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

痴意少年 2024-09-03 05:59:39

在 Ruby 中,当您调用 a * b 时,您实际上是在调用 a 上名为 * 的方法。试试这个,例如:

a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30

c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"

因此 ; * 工作正常,因为 String 上的 * 方法了解如何处理整数。它通过将自身的多个副本连接在一起来做出响应。

但是,当您执行 3 * "repeat" 时,它会使用 String 参数调用 Fixnum 上的 *。这是行不通的,因为 Fixnum* 方法期望看到另一种数字类型。

In Ruby, when you call a * b, you're actually calling a method called * on a. Try this, for example:

a = 5
=> 5
b = 6
=> 6
a.*(b)
=> 30

c = "hello"
=> "hello"
c.*(a)
=> "hellohellohellohellohello"

Thus <String> * <Fixnum> works fine, because the * method on String 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 * on Fixnum with a String argument. That doesn't work, because Fixnum's * method expects to see another numeric type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文