2011-12-05 50 views
5

爲了問類似:Ruby中的布爾方法?

MyClass::create().empty? 

我怎麼會內MyClass的設立empty

空(真/假)取決於類變量@arr是否爲空。

+3

你的意思是*類變量*'@@ arr'或*實例變量*'@ arr'? – maerics

+3

在Ruby中,有'initialize'被'MyClass.new'調用。 – Reactormonk

+2

「在Ruby中,有被MyClass.new調用的初始化」。同意。在Ruby中遵循這一點是很好的;當你有你的Ruby拖鞋時,堅持黃磚路。 –

回答

7

問號實際上是方法名稱的一部分,所以你可以這樣做:

class MyClass 

    def empty? 
    @arr.empty? # Implicitly returned. 
    end 

end 
2

正是我在過去後表現出相同的,但使用不同的方法名。

首先,create必須用empty?方法返回一些東西。例如:

class MyClass 
    def self.create 
    [] 
    end 
end 

如果你想被按你的最後一個問題上的MyClass實例操作:

class MyClass 
    def self.create 
    MyClass.new 
    end 

    def initialize 
    @arr = [] 
    end 

    def empty? 
    @arr.empty? 
    end 

    def add x 
    @arr << x 
    self 
    end 
end 

這裏MyClass作爲圍繞一個數組的簡單包裝,提供add方法。

pry(main)> MyClass.create.empty? 
=> true 
2

您可能還需要檢查@arr是否爲零。這取決於你的空類定義。

def empty? 
    [email protected] || @arr.empty? 
end 
0

你可以使用Forwardable委託從你的類empty?到數組:

require "forwardable" 
class MyClass 
    extend Forwardable 
    def_delegators :@arr, :empty? 

    def initialize(arr) 
    @arr = arr 
    end 
end 

my_object = MyClass.new([]) 
my_object.empty? # => true