究竟作者想要我理解什么?

时间:2012-06-08 20:44:06

标签: ruby object

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

第二个例子令人困惑,除非你记得一切都是对象   Ruby(是的,甚至是字符串文字!它们是String类。)。由于字符串文字   创建一个String对象,您可以像对待任何其他对象一样对其进行操作。在这种情况下,   将一个字符串乘以3简单地做你想象的:制作三个副本   字符串。

我在其中一本红宝书中读到了上述段落。第一行说第二个例子令人困惑,除非你记得一切都是Ruby中的对象。在第二个例子中我应该记得什么,一切都是红宝石中的一个对象?这不是一个乘以3的功能会打印 tora 三次吗?

我并不完全明白作者希望我从上一段

中理解什么

3 个答案:

答案 0 :(得分:1)

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

('*'只是方法名称)

答案 1 :(得分:1)

嗯,是的,你可以认为它可能是一个特征,但作者可能试图解释(尽管至少在这一段中并不是很清楚),实际上发生的是这样的:

  1. "Tora !"是类String的对象(“一切都是对象”
  2. 你可以像任何其他对象一样对其采取行动”,意思是:
     “就像任何其他对象一样,你可以在其上调用任何方法”  在这种情况下,您调用方法*(乘法)。
  3. 所以实际上发生的是"Tora !" String以这样的方式被调用:

    "Tora ! ".*(3)
    => "Tora ! Tora ! Tora ! "
    
    你知道吗?运算符*只是String对象上的一种方法。

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

    如果你不熟悉其他语言,你可能会发现它并不那么引人注目,因为在Ruby中它只是日常生活中的常见事物。您永远不需要键入1.+(2),Ruby会在您键入1 + 2时自动为您执行此操作。

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

答案 2 :(得分:1)

"#{"Tora! "*3}" 

“这不仅仅是一个乘以3的特征会打印三次吗?”。

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

嗯,也许这不是作者想要你理解的东西,无论如何它都很重要。