0

カードのデッキを提供することになっているコードは次のとおりです。

class Cards
attr_accessor :value, :color

    def initialize(value, color)
    @value = value
    @color = color
end

end



2.upto(14) do |number|
recent = number
    1.upto(4) do |value|
        case value
        when 1
            color = :Spades
        when 2
            color = :Clubs
        when 3
            color = :Hearts
        when 4
            color = :Diamonds
        end             
        #{recent}of#{color} = Cards.new(recent, color)
        puts "#{recent}of#{color}"
    end
end 

そしてそれはうまくいきます。しかし、この行を追加しようとすると:

deck << #{recent}of#{color}

puts '#{recent}of#{color}'

突然ワイルドエラーが表示されます!

poker.rb:29: syntax error, unexpected kEND

そして、オブジェクトを配列に移動するこの行がどのようにそれを引き起こすのか、私には少しもわかりません...

4

2 に答える 2

1

気付いていないと思いますが、次の行はコメントであり、実行中は完全に無視されます (これが、この行が「機能する」唯一の理由です)。

#{recent}of#{color} = Cards.new(recent, color)

ローカル変数を定義するときは補間できません。実際、Ruby ではローカル変数を動的に定義することはまったくできません (1.9 以降ではそうではありません)。

より広く言えば、オープン補間を行うことはできません ( を使用しようとしているようにdeck << #{recent}of#{color}) 。補間は、二重引用符で囲まれた文字列 (または同等の構造) または正規表現内でのみ発生します。

代わりに、新しいカードをデッキに直接シャベルで入れます。

deck << Cards.new(recent, color)
于 2013-02-16T01:56:01.453 に答える
0

文字列補間を使用するには、二重引用符または文字列リテラルが必要です。

deck << "#{recent}of#{color}"

また

deck << %(#{recent}of#{color})
于 2013-02-16T01:33:39.743 に答える