2013-03-09 51 views
0

Ruby是強類型語言。因此它執行type conversion而不是type casting。現在有兩種類型的轉換 - implicitexplicitRuby中的類型轉換

基於什麼規則,ruby確定哪種類型的轉換適用於什麼上下文?

+0

忘記術語[「strong typed」](http: //stackoverflow.com/a/9929697/395760)。它不明確,毫無意義,毫無價值,甚至可能是有害的。 – delnan 2013-03-09 20:41:19

+0

我認爲你有一些概念困惑。 *類型轉換*和*類型鑄造*不是替代品。 *類型轉換*可以在靜態類型語言中發生,但由於Ruby是動態類型的,所以不適用。 – troelskn 2013-03-09 20:42:15

+0

@troelskn道歉。我糾正了我的描述。我寧可寧願而不寧早。 – 2013-03-09 20:44:52

回答

2

Ruby是「duck typed」,既不是強類型也不是弱類型,這意味着變量/對象的行爲不一定取決於它所屬的類,而是非常「盲」,並且在運行時沒有方法調用鍵入檢查。如果不能這樣做,則會引發錯誤。

Ruby對Integer,String和其他一些內部類進行了隱式轉換。是否執行轉換取決於左操作數。例如,

1 + "2" 

左操作數是一個整數,所以ruby試圖做一個數學運算+。但是右操作數是一個字符串,所以ruby會嘗試從字符串到整數進行轉換(coersion)。 (雖然它仍然失敗,爲了使它工作,需要重新定義Integer的方法+或者我們稱之爲猴子補丁使用String#to_i進行顯式轉換)

+0

左手操作數是一個'integer',因此ruby試圖用'to_int'做這樣的隱式轉換。但是string沒有'to_int',因此隱式轉換失敗,並且屏幕上出現一個錯誤:TypeError:can not將字符串轉換爲整數。我抓住了嗎? – 2013-03-09 21:02:27

+0

@Priti是,不是...... Ruby對內部類型使用類型轉換(在轉換和覆蓋之間),而不是直接調用「to_xxx」方法。 – texasbruce 2013-03-09 21:07:52