0

这是代码

class RockPaperScissors

attr_reader :rock, :paper, :scissors, :determinant

def initialize
    @rock=1
    @paper=2
    @scissors=4
    @determinant=0
end

def play(param1, param2)
    @determinant = param1 + param2
    puts @determinant
end

end

现在这段代码不完整,我需要 @determinant 变量实际上是 param1 和 param2 的总和才能继续。

这是命令行活动的简短摘要

irb
source "rps2.rb"
rps = RockPaperScissors.new
rps.play(:scissors, :rock)

NoMethodError: undefined method '+' for :scissors:Symbol
from rps2.rb.rb:14:in 'play'
from (irb):23
4

3 回答 3

2

尝试这个:

rps.play(rps.scissors, rps.rock)
于 2012-06-07T01:03:26.387 回答
1

如果你有“attr_reader”,你需要这样玩:

rps.play(rps.scissors, rps.rock)

另一种使用符号的可能方式:

def initialize
    @hand = { :rock => 1, :paper => 2, :scissors => 4 }
    @determinant=0
end

def play(param1, param2)
    # check if params are correct

    puts @determinant = @hand[param1] + @hand[param2]
end
于 2012-06-07T01:08:59.497 回答
1
@determinant = param1 + param2

也许应该是

@determinant = instance_variable_get("@#{param1}") + instance_variable_get("@#{param2}")
于 2012-06-07T00:59:22.630 回答