Ruby是強類型語言。因此它執行type conversion
而不是type casting
。現在有兩種類型的轉換 - implicit
和explicit
。Ruby中的類型轉換
基於什麼規則,ruby確定哪種類型的轉換適用於什麼上下文?
Ruby是強類型語言。因此它執行type conversion
而不是type casting
。現在有兩種類型的轉換 - implicit
和explicit
。Ruby中的類型轉換
基於什麼規則,ruby確定哪種類型的轉換適用於什麼上下文?
Ruby是「duck typed」,既不是強類型也不是弱類型,這意味着變量/對象的行爲不一定取決於它所屬的類,而是非常「盲」,並且在運行時沒有方法調用鍵入檢查。如果不能這樣做,則會引發錯誤。
Ruby對Integer,String和其他一些內部類進行了隱式轉換。是否執行轉換取決於左操作數。例如,
1 + "2"
左操作數是一個整數,所以ruby試圖做一個數學運算+。但是右操作數是一個字符串,所以ruby會嘗試從字符串到整數進行轉換(coersion)。 (雖然它仍然失敗,爲了使它工作,需要重新定義Integer的方法+或者我們稱之爲猴子補丁使用String#to_i進行顯式轉換)
左手操作數是一個'integer',因此ruby試圖用'to_int'做這樣的隱式轉換。但是string沒有'to_int',因此隱式轉換失敗,並且屏幕上出現一個錯誤:TypeError:can not將字符串轉換爲整數。我抓住了嗎? – 2013-03-09 21:02:27
@Priti是,不是...... Ruby對內部類型使用類型轉換(在轉換和覆蓋之間),而不是直接調用「to_xxx」方法。 – texasbruce 2013-03-09 21:07:52
忘記術語[「strong typed」](http: //stackoverflow.com/a/9929697/395760)。它不明確,毫無意義,毫無價值,甚至可能是有害的。 – delnan 2013-03-09 20:41:19
我認爲你有一些概念困惑。 *類型轉換*和*類型鑄造*不是替代品。 *類型轉換*可以在靜態類型語言中發生,但由於Ruby是動態類型的,所以不適用。 – troelskn 2013-03-09 20:42:15
@troelskn道歉。我糾正了我的描述。我寧可寧願而不寧早。 – 2013-03-09 20:44:52