这是应该给出一副牌的代码:
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
并且我没有丝毫想到这条将对象移动到数组中的行如何导致它......
答案 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})