【问题标题】:Ruby Method - Won't Take Second Parameter - BlackjackRuby 方法 - 不会采用第二个参数 - 二十一点
【发布时间】:2014-12-13 06:26:32
【问题描述】:

构建二十一点游戏。如果我在 display_cards 方法中添加第二个参数,一切都会崩溃。如果我从方法中取出参数然后调用它,一切正常。怎么了?

def play
  game_deck = initialize_deck
  game_deck = shuffle_deck(game_deck)
  human_cards = []
  computer_cards = []
end

def initialize_deck (number_of_decks = 6)
  deck_values = ["A", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
  suits = ["-Hearts", "-Diamonds", "-Clubs", "-Spades"]
  deck = []
  number_of_decks.times do 
    suits.each do |suit|
      deck_values.each do |value|
        deck << value+suit
      end
    end
  end
  return deck
end

def display_cards (player_cards , player_name)
  card_string = "#{player_name}'s Cards\n-----------------"

  player_cards.each do |card|
    card_string += "\n| #{card}"
    card_string += "\n-----------------"
  end
  puts card_string
end

def shuffle_deck(deck , number_of_shuffles = 6)
  number_of_shuffles.times do
    deck = deck.sample(deck.count)
  end
  return deck
end

def pull_card(game_deck, player_cards)
  player_cards << deck.shift
end
test_cards = ["A-Hearts", "3-Spades", "10-Diamonds"]
name = "ARealHumanBean"
display_cards (test_cards , name)

【问题讨论】:

  • deck 是一个数组。数组有一个洗牌!方法。洗牌 6 次没有用。
  • 谢谢斯蒂恩。简化了代码 :) 并感谢解决方案的家伙。很高兴我的逻辑没问题。但是,嘘。在额外的空间上进行大量的头撞!

标签: ruby methods parameters


【解决方案1】:

去掉这里的空格:

display_cards (test_cards , name)
             ^

我认为 Ruby 将 (test_cards, name) 视为块或结构,并尝试将其作为单个参数传递给您的函数 display_cards。

有趣的是,它在 jruby 中完美运行。

【讨论】:

  • 当然不是块,它需要块开始/结束令牌。
【解决方案2】:

因为空格,Ruby 相信 "(test_cards , name)" 是第一个参数,并抱怨缺少第二个参数。

这些语法会起作用

display_cards(test_cards, name)
display_cards test_cards, name

【讨论】:

    猜你喜欢
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-23
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多