私は、同じロジックの異なる組み合わせをたくさん含むメソッドをいくつか持っています。それをきれいにするために、私は各テストをただ一回定義したいと思います。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])
誰かが知っている、私は何が欠けていますか?
私たちは「物事をクリーンアップ」の話をしているときに、あなたに細心の注意を払うようにしたい一つのことは変わらないと宣言されていますが、メソッド内の使い捨ての配列このような。 'PREFIXES =%w [he she it]'のような定数を使い、その配列を何度も何度も使ってください。あいまいさやパフォーマンスの問題がある場合は、正規表現を使用することもできます。同様に、一度使用された一時ハッシュを返すことは、特にハッシュが変わらない場合は非常に非効率的です。 – tadman
テストコードのコンテキストが明確ではありません。あなたはどこを走っていますか?また、なぜクラススタイルの '@@'変数を宣言していますか? – tadman
@tadmanには、代名詞を定数変数に区切ることに同意します。また、 'freeze'メソッドを使って変更することはできません。 'PREFIXES =%w(彼は彼女).freeze' –