2010-08-07 53 views

回答

34

取決於你所說的「一切」是什麼。正如其他人已經證明的那樣。類也是類Class的實例。方法,操作符和塊不是,但可以用對象包裝(Proc)。簡單的任務不是,也不是。像while這樣的聲明也不是也不能。後者顯然也有評論。

實際上重要的事情,即您希望操縱的東西是對象(或可以包裝在對象中)。

+1

+1喜歡這些反例。說一切都是一個對象,沒有考慮所有事情都會被輕度洗腦:) – Jakob 2010-08-07 09:44:45

+0

+1 - 這是我在其他一些問題中想說的,這個問題已經從中產生了。 – RubyDubee 2010-08-10 07:52:45

+0

爲什麼不是'while'對象? – Ziggy 2014-06-12 22:46:04

1

燁。

> Fixnum.is_a?(Object) #=> true 

要查看繼承鏈:

> pp Fixnum.ancestors 
[Fixnum, 
Integer, 
Precision, 
Numeric, 
Comparable, 
Object, 
    ... 
Kernel] 
=> nil 
+0

'#ancestors'也提供了所有包含的模塊,而不僅僅是繼承鏈。 – jtbandes 2010-08-07 07:40:08

+0

此外,'pp'默認情況下不可用,至少在1.8.7p174。 – jtbandes 2010-08-07 07:42:44

+0

是的,我知道!謝謝。 – Dex 2010-08-07 11:34:10

4

是。 Fixnum是一類,它從Integer繼承,它從Numeric,其最終從Object繼承繼承。

或者說,爲什麼你不問嗎? :)

1.is_a? Object # => true 
1.class # => Fixnum 
Fixnum.is_a? Object # => true 

Ruby infodocumentation在網站上是非常好的方法。

2

紅寶石doen't有任何原語(如int,焦炭等在Java),所以每一個值(任何可以坐在賦值語句的右側)是一個對象。但是,語言語法的控制語句,方法和其他功能不是。

4

實際上一切在Ruby是一個對象,具有控制結構的異常。無論是在方法,代碼塊還是操作符之下,它們都被表示爲對象,並且可以這樣認爲。

以一個碼塊,例如:

def what_is(&block) 
    puts block.class 
    puts block.is_a? Object 
end 

> what_is {} 
Proc 
true 
=> nil 

或爲一個方法:

class A 
    def i_am_method 
    "Call me sometime..." 
    end 
end 

> m = A.new.method(:i_am_method) 
> m.class 
Method 
> m.is_a? Object 
true 
> m.call 
"Call me sometime..." 

和運營商(例如+, - ,[],< <)被實現爲方法:

class String 
    def + 
    "I'm just a method!" 
    end 
end 

對於第一次進入編程的人來說,這是什麼意思在ap從邏輯上講,所有適用於某種對象的規則都可以擴展到其他規則。您可以將您定義的字符串,數組,類,文件或任何類視爲以非常相同的方式運行。這是Ruby比其他語言更易於使用和使用的原因之一。