2016-09-29 2 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 
... 

잘 작동하지만이 방법을 사용하여 다른 방법으로 사용하려고합니다.

#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 (he she he) .freeze' –

답변

1

문장 클래스의 인스턴스에서 인스턴스 메서드 options을 호출하지 않습니다. 변하지 선언한다에 당신이주의를 지불하고 싶지

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

그건 내 질문에 대한 올바른 대답이지만, 지금 나는 모든 것을 잘못된 길로 가고 있다는 것을 깨닫는다. 빠른 답변 주셔서 감사합니다. 제 코드에 대해 다시 생각해 보았습니다. –

관련 문제