"Inches/yard: #{12*3}" "#{"Tora! "*3}"
第二个例子令人困惑,除非你记得一切都是对象 Ruby(是的,甚至是字符串文字!它们是String类。)。由于字符串文字 创建一个String对象,您可以像对待任何其他对象一样对其进行操作。在这种情况下, 将一个字符串乘以3简单地做你想象的:制作三个副本 字符串。
我在其中一本红宝书中读到了上述段落。第一行说第二个例子令人困惑,除非你记得一切都是Ruby中的对象。在第二个例子中我应该记得什么,一切都是红宝石中的一个对象?这不是一个乘以3的功能会打印 tora 三次吗?
我并不完全明白作者希望我从上一段
中理解什么答案 0 :(得分:1)
“Tora!a”是String类的一个实例。你可以在上面调用方法。这在许多语言中是不可能的,例如PHP。
('*'只是方法名称)
答案 1 :(得分:1)
嗯,是的,你可以认为它可能是一个特征,但作者可能试图解释(尽管至少在这一段中并不是很清楚),实际上发生的是这样的:
"Tora !"
是类String
的对象(“一切都是对象”)*
(乘法)。所以实际上发生的是"Tora !"
String
以这样的方式被调用:
"Tora ! ".*(3)
=> "Tora ! Tora ! Tora ! "
你知道吗?运算符*
只是String
对象上的一种方法。
在许多较简单的语言中,运算符实际上是“融入”语言本身,而不是作为方法调用在目标上运行。
如果你不熟悉其他语言,你可能会发现它并不那么引人注目,因为在Ruby中它只是日常生活中的常见事物。您永远不需要键入1.+(2)
,Ruby会在您键入1 + 2
时自动为您执行此操作。
所以这就是作者希望你记住的 - 所有操作符和操作本质上只是对其他对象的方法调用。
答案 2 :(得分:1)
"#{"Tora! "*3}"
“这不仅仅是一个乘以3的特征会打印三次吗?”。
这是不准确的。在Ruby中没有乘法运算符这样的东西。 方法".*"
(并且解析器以相同的方式处理“*”)在String和Numeric对象上定义(但两者都不打印任何东西)。他们做了很多不同的事情,但结果就是你所期望的。
嗯,也许这不是作者想要你理解的东西,无论如何它都很重要。