2012-01-09 28 views
1

Ruby Language - About我們可以發現這樣一句話:條件語句是Ruby中的對象嗎?

在Ruby中,一切都是對象的信息和代碼的每一位都可以給出自己的屬性和行爲

它是相當困難的瞭解限制的地方。我們不能說條件性陳述是對象,我們可以嗎?如果沒有,那麼「每一點信息」在這裏意味着什麼?

+0

關鍵字不是對象。 – 2012-01-09 16:45:01

+0

相關問題:http://stackoverflow.com/questions/3429553/is-everything-an-object-in-ruby – 2012-01-09 21:45:34

回答

3

這句話有些誇張。 Ruby中的每個數據項目對象(或更確切地說是對象的後代),並且Proc是也是對象的一小段代碼的一個示例。但Ruby中有許多不是對象的概念,例如關鍵字,任意語句等。

但是,完整的語句總是將評估爲到一個對象中。我認爲作者的意圖是要大幅描述沒有任何價值,原始的或其他的,這不是語言中的對象。

# Data items are all objects. 
1.class # => Fixnum 
(2 ** 64).class # => Bignum 
"a".class # => String 
{}.class # => Hash 
nil.class # => NilClass 
lambda {|x| x}.class # => Proc 

# Statements, including conditionals, *evaluate* to objects. 
(true ? "a" : 1).class # => String 
(false ? "a" : 1).class # => Fixnum 
(if true; 'a'; else; 1; end).class # => String 
(if false; 'a'; else; 1; end).class # => Fixnum 
(while true; break; end).class # => NilClass 
+0

可以將條件語句抽象爲'lambda {| c,t,f | C ? t.call:f.call}',這使得它成爲一個對象(沒有立即評估),這意味着在Ruby中可以通過使用對象在運行時構建代碼。 – Romain 2012-01-09 17:00:49

+0

@Romain:是的,這是絕對正確的,但'lambda'語句仍然只返回一個'Proc'對象。 – maerics 2012-01-09 17:50:05

+0

感謝您的詳細解答!這現在是有道理的:-) – Nobita 2012-01-09 18:24:47