2016-09-29 7 views
0

私は、同じロジックの異なる組み合わせをたくさん含むメソッドをいくつか持っています。それをきれいにするために、私は各テストをただ一回定義したいと思います。Rubyでクラス変数を割り当てるときに、インスタンスメソッドを呼び出すことはできますか?

class Sentence < ApplicationRecord 

#Gathers options hash for sentence 
def options 
    { 
     pronoun: subject.pronoun, 
     ... 
     } 
end 

#gives auxiliary verb based on sentence options 
def aux 
    third_person = ["he", "she", "it"].include?(options[:pronoun]) 

    aux = "does" if third_person #just an example 
    ... 
end 
... 

これはうまくいきますが、これを他の方法で使用するためにauxメソッドから取り除こうとしています。

#this works 
@@third_person = ["he", "she", "it"].include?("he") 
#this says that there is no options method 
@@third_person = ["he", "she", "it"].include?(options[:pronoun]) 

誰かが知っている、私は何が欠けていますか?

+1

私たちは「物事をクリーンアップ」の話をしているときに、あなたに細心の注意を払うようにしたい一つのことは変わらないと宣言されていますが、メソッド内の使い捨ての配列このような。 'PREFIXES =%w [he she it]'のような定数を使い、その配列を何度も何度も使ってください。あいまいさやパフォーマンスの問題がある場合は、正規表現を使用することもできます。同様に、一度使用された一時ハッシュを返すことは、特にハッシュが変わらない場合は非常に非効率的です。 – tadman

+2

テストコードのコンテキストが明確ではありません。あなたはどこを走っていますか?また、なぜクラススタイルの '@@'変数を宣言していますか? – tadman

+0

@tadmanには、代名詞を定数変数に区切ることに同意します。また、 'freeze'メソッドを使って変更することはできません。 'PREFIXES =%w(彼は彼女).freeze' –

答えて

1

インスタンスのメソッドoptionsをSentenceクラスのインスタンスで呼び出すことはありません。

あなたはこのようにそれを呼び出す必要があり:

sentence = Sentence.new 
['he', 'she', 'it'].include?(sentence.options[:pronoun]) 
+0

これは私の質問に対する正しい答えですが、今私はすべてが間違った方向に進んでいたことを認識しています。迅速な回答をありがとう、私のコードを再考するのに役立ちました。 –

関連する問題