意外的'期待kEND'

时间:2013-02-16 01:27:32

标签: ruby

这是应该给出一副牌的代码:

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

并且我没有丝毫想到这条将对象移动到数组中的行如何导致它......

2 个答案:

答案 0 :(得分:1)

我认为你没有意识到这一点,但下面一行是评论,并且在执行期间完全被忽略(这是这条线“工作”的唯一原因):

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

定义局部变量时无法插值。实际上,你根本不能在Ruby中动态定义局部变量(好吧,不是在1.9 +中)。

更广泛地说,你不能只有开放插值(就像你试图用deck << #{recent}of#{color}那样) - 插值只能 出现在双引号字符串(或等效结构)中或正则表达式。

相反,只需将新卡直接铲入卡组:

deck << Cards.new(recent, color)

答案 1 :(得分:0)

您需要使用双引号或字符串文字来使用字符串插值:

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

deck << %(#{recent}of#{color})