Ruby - 没有将Fixnum隐式转换为字符串

时间:2015-12-12 21:53:34

标签: ruby

我正在尝试编写一个Ruby程序来向一个播放器处理2张卡但是我收到错误消息没有将Fixnum隐式转换为字符串。我看过类似的问题,我认为它们不适用于这个问题。我很感激任何帮助。这是我的代码:

def get_card (card)
  suit = (card - 1)/13
  if (card == 0)
    puts " of clubs"
  elsif (card == 1)
    puts " of diamonds"
  elsif (card == 2)
    puts " of hearts"
  elsif (card == 3)
    puts " of spades"
  end

  card % 13
  if (card == 1)
    return "ace" + suit
  elsif (card == 11)
    return "jack" + suit
  elsif (card == 0)
    return "king" + suit
  elsif (card == 2)
    return "2" + suit
  elsif (card == 3)
    return "3" + suit
  elsif (card == 4)
    return "4" + suit
  elsif (card == 5)
    return "5" + suit
  elsif (card == 6)
    return "6" + suit
  elsif (card == 7)
    return "7" + suit
  elsif (card == 8)
    return "8" + suit
  elsif (card == 9)
    return "9" + suit
  elsif (card == 10)
    return "10" + suit
  elsif (card == 12)
    return "queen" + suit
  end
end

def deal_cards
  total_cards = (1..52).to_a.shuffle
  player_value = [total_cards.pop, total_cards.pop]
  puts "Your cards are " + get_card(player_value[0]).to_s + " and " + get_card(player_value[1]).to_s
end

deal_cards

2 个答案:

答案 0 :(得分:1)

我认为你的问题可能就在这里:

return "ace" + suit

其中aceString,而西装是Integer suit = (card - 1)/13

你为国王,女王,杰克做同样的事情

答案 1 :(得分:1)

这很容易在命令行上看到,你可以随机选择你的卡片。

当您将交易结果输出到屏幕时,您可以使用:

return "5" + suit

这里的目标是你想要“5spades”或更好,“5个黑桃”。这里的问题是suitFixnum对象,或与int非常相似。

虽然班级String确实有+ operator,但它只能与其他字符串一起使用。

以下是重现错误的示例:

"ace" + 1
TypeError: no implicit conversion of Fixnum into String

要以简单的术语表达您的观点,您可以通过Fixnum.to_s转换为字符串,如下所示:

> "ace" + 1.to_s
=> "ace1"

或者您可以像这样使用字符串插值:

> "ace#{1}"
=> "ace1"