aaaaaa 6 * x #=> TypeError: String can't be coerced into Fixn-6ren">
gpt4 book ai didi

ruby - 为什么乘法在 Ruby 中并不总是可交换的?

转载 作者:太空宇宙 更新时间:2023-11-03 17:03:11 25 4
gpt4 key购买 nike

如果 x 是一个非整数,我得到这个结果:

x = "a"
x * 6 #=> aaaaaa
6 * x #=> TypeError: String can't be coerced into Fixnum

而如果 x 是一个整数:

x = 6
x * 6 #=> 36
6 * x #=> 36

奇怪的是,如果 x 是非整数,则乘法中的操作数顺序很重要,而如果 x 是整数,则不是。有人可以解释这背后的理性是什么吗?当 x 是字符串时,为什么变量 x 必须在 * 运算符之前以避免引发错误?

最佳答案

  1. 您在后一个代码段中有错字:它应该以 x = 6 开头(不带引号。)

  2. Ruby 中的一切都是对象,包括 StringInteger 的实例,甚至是 [唯一的] 实例 nil NilClass 的。

也就是说,没有只是一个运算符 *。这是一个普通的好方法,在不同的类上声明,由 operator * 调用(感谢@SergioTulentsev 挑剔的措辞评论。)这是 String#* 的文档,其他你可能会发现自己。 "a"* 6 只不过是:

"a".*(6)

您可以在控制台中检查以上内容:这是一个完全有效的 Ruby 代码。所以,不同的类有不同的 * 方法实现,因此上面的结果不同。

关于ruby - 为什么乘法在 Ruby 中并不总是可交换的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45401005/

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