2011-12-05 11 views
5

Rubyのブールメソッド?</p>私はMyClassの内<code>empty</code>を設定する方法を <pre><code>MyClass::create().empty? </code></pre> <p>:ような何かを尋ねるために

空(真/偽)は、クラス変数@arrが空であるかどうかによって異なります。あなたがこれを行うだろうよう

+3

あなたは*クラス変数* 'arr' @@または*インスタンス変数*'を意味するか@ arr'? – maerics

+3

Rubyには、 'MyClass.new'によって呼び出される' initialize'があります。 – Reactormonk

+2

"Rubyでは、MyClass.newによって呼び出される初期化があります"。合意したそして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方法を提供します。

2

@arrがnilであるかどうかを確認する必要があります。これは空のクラス定義に依存します。

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

あなたは配列にあなたのクラスからempty?を委任するForwardableを使用することができます。

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 
関連する問題

 関連する問題