2016-07-06 80 views
-1

我想知道有什麼區別這兩個示例:紅寶石初學者我有點困惑

my_name = gets.chomp 
my_name.capitalize 

my_name = gets.chomp 
my_name.capitalize! 
+0

通讀Ruby文檔,特別是Ruby附帶的方法的類文檔。他們是你的朋友。 ['capitalize'](http://ruby-doc.org/core-2.3.1/String.html#method-i-capitalize)與['capitalize!'](http://ruby-doc.org /core-2.3.1/String.html#method-i-capitalize-21)如果你要編程,這非常重要,你會習慣於閱讀你選擇的任何語言的文檔。教程是可以的,但文檔是真相的來源。 –

+0

我不知道你在說什麼文檔?我正在網上學習codeacademy。 –

回答

1

從紅寶石capitalize文檔:

capitalize 

返回str的副本,第一個字符爲con轉換爲大寫 ,其餘爲小寫。

capitalize! 

通過轉換第一個字符爲大寫和 其餘爲小寫修改STR。如果沒有更改,則返回nil。

+0

非常感謝。 –

3

不同的是

my_name.capitalize 

返回my_name大寫的版本,而不會影響對象my_name點,而

my_name.capitalize! 

仍返回my_name大寫的版本,但my_name過改變,所以

my_name = "john" 
puts my_name.capitalize # print 'John' but the value of my_name is 'john' 
puts my_name.capitalize! # print 'John' and now the value of my_name is 'John' 
+0

我不明白你的意思是「返回my_name的大寫版本而不影響my_name指向的對象」 –

+0

你知道一個變量保持一個值。在第一種情況下,大寫,是一種返回首字母大寫的字符串的方法,不會更改變量的值。在後者中,該方法返回一個字符串,其首字母也是大寫,但它也會更改變量的值。 – Ursus

+0

謝謝,我現在明白了! –

0

我總是很高興看到有人進入紅寶石!

與紅寶石的事情是,即使它是一種非常友好的語言,它假設了很多東西,沒有必要告訴新手它。一旦你在語言背後有幾個月的時間,但是之前沒有,那麼它們就很有意義,所以我理解你的問題。

首先,爆炸(!)只是名稱本身的一部分。與其他任何字符一樣,Ruby允許感嘆號和問號作爲方法名稱的一部分。很酷,對吧?

爲什麼人們打擾,但?那是一個慣例。作爲一個經驗法則,爲什麼一種方法應該有一個重要標誌的公認的解釋是該方法做了一個侵入性,破壞性或變異性的事,也就是說,它破壞數據,在數據庫上運行事務,永久性地改變數據等等。

這不是強制性的命名這種類型的方法,但它是一個在Ruby社區中非常好的約定。

編程的Ruby說:

中的方法是 「危險的」,或修改接收器,可能被命名爲 後面有個 「!」。

希望能回答你的問題。

+0

非常感謝您的解釋。 –