2012-06-08 34 views
0
"Inches/yard: #{12*3}" 
"#{"Tora! "*3}" 

第二個例子是混亂的,除非你記住,一切都在 紅寶石的對象(是的,即使字符串文字!他們是String類的)。由於字符串文字 創建了一個String對象,因此您可以像對待其他任何對象一樣對其執行操作。在這種情況下, 將字符串乘以3就可以做出您會想到的事情:製作 字符串的三個副本。究竟是什麼作者想讓我理解?

我在紅寶書中閱讀了上述段落。第一行說第二個例子令人困惑,除非你記得所有東西都是Ruby中的對象。在第二個例子中,我應該記住的是,一切都是Ruby中的對象?是不是隻有乘以3的特徵纔會打印tora三次?

我完全不明白什麼是作者要我從上面的段落理解

回答

1

嗯,是的,你可以認爲這是一個特點,也許,但什麼筆者也許是試圖解釋(雖然不是很清楚,至少在這一個段落)是,什麼是真正的情況是這樣的:

  1. "Tora !"String類的對象(「一切都是對象」
  2. 你可以就此採取行動,就像任何其他對象「,意思是:
    」你可以在任何其他對象上調用任何方法「。
    在這種情況下,您正在調用方法*(乘法)。

那麼什麼是真正的情況是,"Tora !"String被調用在這樣的方式:

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

你明白嗎?運算符*只是String對象上的一種方法。

在許多更簡單的語言中,操作符實際上是「烘焙到」語言本身中的,並且不像方法調用那樣在目標上操作。

如果你不習慣其他語言,你可能不會發現這一切非凡,因爲在Ruby中它只是一個普通的日常事物。您只需輸入1.+(2),Ruby會自動爲您輸入1 + 2

所以這就是作者希望你記住的 - 所有的操作符和操作本質上都是對其他對象的方法調用。

1

「虎!a」是String類的一個實例。你可以調用它的方法。這在許多語言中是不可能的,例如PHP。

(「*」只是方法名)

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

「是不是隻是一個功能,乘以3將打印TORA三次?」。

這是不準確的。 Ruby中不存在乘法運算符。有方法".*"(和解析器對待「*」以同樣的方式)定義在字符串和數字對象(但都不打印任何東西)。他們做的事情截然不同,但結果就是你所期望的。

好吧,也許這不是作者想讓你理解的東西,無論如何它是重要的。