2015-01-26 3 views
0
여기

내가 통과하려고 테스트입니다루비 설정 기본 해시 값

class Play < ActiveRecord::Base 

    before_save { self.word = word.downcase } 

    validates :word, presence: true, length: { maximum: 7 } 

    def letter_scores 
    {"A"=>1, "B"=>3, "C"=>3, "D"=>2, "E"=>1, "F"=>4, "G"=>2, "H"=>4, "I"=>1, "J"=>8, 
    "K"=>5, "L"=>1, "M"=>3, "N"=>1, "O"=>1, "P"=>3, "Q"=>10, "R"=>1, "S"=>1, "T"=>1, 
    "U"=>1, "V"=>4, "W"=>4, "X"=>8, "Y"=>4, "Z"=>10} 
    end 

    def score(word_multiplier: :single) 
    word_multiplier = {:single => 1, :double => 2, :triple => 3} 

    word.upcase.chars.inject(0){|sum, letter| sum + letter_scores[letter]} * word_multiplier 
    end 
end 

그래서 내 생각은 내가 기본값을 필요로한다는 것입니다 hash해라 : single. word_multiplier => : double의 키/값 쌍이 전달 된 경우 2를 반환하는 해시가 필요합니다.

문법 문제가 있습니다. 1) = 기호를 사용하는 메소드에서만 기본값을 설정했습니다. 해시가 아닙니다. 어떻게하면됩니까?

2) 괄호 안에 word_multiplier : : single을 넣습니다. 기본값은 기본값으로 설정됩니다. 그러나 : word_multiplier => : 싱글은 작동하지 않습니다. 무슨 일 이니?

답변

1

왜 기호/열거 체계를 사용하여 배율을 설정하고 있습니까? 당신이 그것을 할, 당신은 방법에게 승수를 통과하지 못한 경우 해시 기본 매개 변수를 사용해야하는 경우

def score(word_multiplier = 1) 
    word.upcase.chars.inject(0){|sum, letter| sum + letter_scores[letter]} * word_multiplier 
end 

, 그것은 1

로 기본 설정됩니다 : 난 그냥 숫자로 다루고 싶어요 .

def my_method(options = {:multiplier => :single}) 
    multipliers = {:single => 1, :double => 2, :triple => 3} 
    word_multiplier = multipliers[options[:multiplier]] 
end 
1

당신이 전달 된 인수를 사용하지 않고, 해시에 word_multilier를 재 할당 다음 인수로 word_multiplier에 기본을 할당하고하고있는 가장 빠른 방법 것은 해결하기 : 당신이 어떤 다른 종류의 것과 같은 방식으로 이 모양은 다음과 같습니다.

word_multiplier = {:single => 1, :double => 2, :triple => 3}[word_multiplier] 

Nb. 사람들이 Ruby 1.8.7 및 Ruby 1.9.3 사용을 중단 할 때까지 사람들이 코드를 사용하게하려면 키워드 인수를 사용하지 마십시오.