0
"Inches/yard: #{12*3}"
"#{"Tora! "*3}"

第二个例子令人困惑,除非你记得在 Ruby 中一切都是对象(是的,甚至是字符串字面量!它们属于 String 类。)。由于字符串字面量创建了一个 String 对象,因此您可以像处理任何其他对象一样对其进行操作。在这种情况下,将一个字符串乘以 3 就如您所想:复制三个字符串。

我在一本红宝石书中阅读了上述段落。第一行说第二个例子令人困惑,除非你记得在 Ruby 中一切都是对象。我应该记住的第二个示例中有什么,一切都是 ruby​​ 中的对象?乘以 3 会打印3 次tora不只是一个特性吗?

我不完全明白作者希望我从上面的段落中理解什么

4

3 回答 3

1
"#{"Tora! "*3}" 

“这不只是乘以 3 会打印 3 次 tora 的功能吗?”。

那是不准确的。Ruby 中没有乘法运算符。在String 和 Numeric 对象定义了一个方法".*"(并且解析器以相同的方式处理“*”)(但两者都不打印任何内容)。他们做的事情非常不同,但结果是你所期望的。

好吧,也许这不是作者想让你理解的,无论如何这很重要。

于 2012-06-08T23:01:48.067 回答
1

好吧,是的,您可能可以将其视为一个功能,但作者可能试图解释的是(尽管至少在这一段中不是很清楚),实际发生的事情是这样的:

  1. "Tora !"是类的对象String“一切都是对象”
  2. 你可以像任何其他对象一样对它进行操作”,意思是:
    “你可以像任何其他对象一样调用它的任何方法”。
    在这种情况下,您正在调用方法*(乘法)。

所以实际上正在发生的事情是以这样的"Tora !" String方式调用的:

"Tora ! ".*(3)
=> "Tora ! Tora ! Tora ! "

你看?运算符*只是String对象上的一个方法。

在许多更简单的语言中,运算符实际上是“融入”语言本身的,而不是作为方法调用对目标进行操作。

如果您不习惯其他语言,您可能不会觉得它有什么了不起的,因为在 Ruby 中,这只是普通的日常事物。您永远不需要输入1.+(2),Ruby 会在您输入时自动为您完成1 + 2

所以这就是作者希望你记住的——所有的操作符和操作本质上只是对其他对象的方法调用。

于 2012-06-08T21:27:06.167 回答
1

“Tora!a”是 String 类的一个实例。您可以在其上调用方法。这在许多语言中是不可能的,例如 PHP。

('*' 只是方法名)

于 2012-06-08T20:48:09.870 回答