2014-11-18 2 views
0

점검은 100 0보다 작거나 큰 정수 작동하지만 '허용되지 않는 문자열이'인텔에 할당되지 않는 이유를 누군가가 나에게 을 알 수 있습니까? 그것은 입니다2 레벨 루비 삼항 연산자가 작동하지

class Human 
    attr_accessor :intel, :agility, :strength 
    def initialize(intel, agility, strength) 
     intel.is_a?(String) ? intel = "string not allowed" : check_range(intel) ? @intel = "Invalid Stat for intel" : @intel = intel 
     check_range(agility) ? @agility = "Invalid Stat for agility" : @agility = agility 
     check_range(strength) ? @strength = "Invalid Stat for strength" : @strength = strength 
    end 
    def check_range(skill) 
     skill.to_f < 0 || skill.to_f > 100 
    end 
    rosetta = Human.new('twenty,26,39) 
    puts rosetta.intel, rosetta.agility, rosetta.strength 
end 
+2

나는 이것이 삼항 조작 학대라고 말하고 싶습니다. 'if/elsif/else' 문으로 쓰면 문제가 명확 해집니다. – August

+1

문자열을 인스턴스 변수에 할당하는 것은 오류를 나타내는 Ruby 방식이 아닙니다. 예외를 발생 시키거나 오리 - 타이핑 일을하고 필요한 것들에 응답하는 것을 점검해야합니다. – Max

+1

질문에 직접 대답하지 않기 때문에 답변으로 게시하지 않지만 다음과 같은 코드를 리팩터링하십시오. https://gist.github.com/cheald/5ad0ca2c61413d26f22b –

답변

0

intel에 할당하기. 이 아니고 에 할당 된은 사용자가 의도 한 것일 수 있습니다.

당신은

@intel = intel.is_a?(String) ? "string not allowed" : check_range(intel) ? "Invalid Stat for intel" : intel 

하지만 실제로는 코드가 극적인 리팩토링을 필요로 그 라인을 변경할 수 있습니다. String을 확인하는 이유는 무엇입니까? 다른 수업도 유효하지 않습니까? 변수에 오류 메시지를 저장하는 이유는 무엇입니까?

+0

물론입니다. 감사 맥스. 8 월과 크리스에게 감사합니다. – probe