Ruby 尝试初始化一组卡片时的nil类
下面的代码导致nil,我不知道为什么。我的初始化有问题吗Ruby 尝试初始化一组卡片时的nil类,ruby,Ruby,下面的代码导致nil,我不知道为什么。我的初始化有问题吗 class Card VALUES = %w(2 3 4 5 6 7 8 9 10 J Q K A) SUITS = %w(S H D C) def initialize(suit, value) @suit = suit @value = value end end class Deck attr_accessor :cards def initial
class Card
VALUES = %w(2 3 4 5 6 7 8 9 10 J Q K A)
SUITS = %w(S H D C)
def initialize(suit, value)
@suit = suit
@value = value
end
end
class Deck
attr_accessor :cards
def initialize
@cards = []
Card::SUITS.each do |suit|
Card::VALUES.each do |value|
@cards << Card.new(suit, value)
end
end
end
end
Deck.new
p @cards
类卡
数值=%w(2 3 4 5 6 7 8 9 10 J Q K A)
诉讼=%w(S H D C)
def初始化(套件、值)
@西装
@价值=价值
结束
结束
甲板
属性存取器:卡片
def初始化
@卡片=[]
卡片:套装。每个都适合|
卡片::值。每个都有值|
@卡片您创建一个新对象Deck.new
,但不打印其卡片的值
-您打印一个@cards
实例变量,在此上下文中该变量为nil
您可能需要类似于p Deck.new.cards
的东西,您创建了一个新对象Deck.new
,但您不打印其卡的值
-您打印了一个@cards
实例变量,在此上下文中该变量为nil
您可能需要类似于p Deck的东西。新的.cards
@cards
在对象之外是未知的。在类Deck
之外,它是Ruby中顶级作用域的实例变量
您必须使用访问器方法获取内容:
class Card
VALUES = %w(2 3 4 5 6 7 8 9 10 J Q K A)
SUITS = %w(S H D C)
def initialize(suit, value)
@suit = suit
@value = value
end
end
class Deck
attr_accessor :cards
def initialize
@cards = []
Card::SUITS.each do |suit|
Card::VALUES.each do |value|
@cards << Card.new(suit, value)
end
end
end
end
deck = Deck.new #<--- Store object in a variable
p deck.cards #<--- Use accessor
类卡
数值=%w(2 3 4 5 6 7 8 9 10 J Q K A)
诉讼=%w(S H D C)
def初始化(套件、值)
@西装
@价值=价值
结束
结束
甲板
属性存取器:卡片
def初始化
@卡片=[]
卡片:套装。每个都适合|
卡片::值。每个都有值|
@卡@cards
在对象外部是未知的。在类Deck
之外,它是Ruby中顶级作用域的实例变量
您必须使用访问器方法获取内容:
class Card
VALUES = %w(2 3 4 5 6 7 8 9 10 J Q K A)
SUITS = %w(S H D C)
def initialize(suit, value)
@suit = suit
@value = value
end
end
class Deck
attr_accessor :cards
def initialize
@cards = []
Card::SUITS.each do |suit|
Card::VALUES.each do |value|
@cards << Card.new(suit, value)
end
end
end
end
deck = Deck.new #<--- Store object in a variable
p deck.cards #<--- Use accessor
类卡
数值=%w(2 3 4 5 6 7 8 9 10 J Q K A)
诉讼=%w(S H D C)
def初始化(套件、值)
@西装
@价值=价值
结束
结束
甲板
属性存取器:卡片
def初始化
@卡片=[]
卡片:套装。每个都适合|
卡片::值。每个都有值|
@卡片或只是:
my_deck = Deck.new
p my_deck.cards
或者只是:
my_deck = Deck.new
p my_deck.cards
简而言之,实例变量只能由同一类中的其他方法看到。我相信你想做的是:
new_deck = Deck.new
p new_deck.cards
在new_deck
上调用cards
方法将返回@cards
简言之,实例变量只能由同一类中的其他方法看到。我相信你想做的是:
new_deck = Deck.new
p new_deck.cards
在new_deck
上调用cards
方法将返回@cards
当前@cards
数组的输出很难读取,并且包含对象信息。我想我会提供一个我刚刚想出的替代方案,希望它能有所帮助:
class Deck
attr_writer :suits, :values
attr_accessor :deck
def initialize
suits
values
generate_deck
shuffle
end
def generate_deck
@deck = []
@suits.each do |suit|
@values.each { |value| @deck << [suit, value] }
end
end
def suits
@suits = ['Clubs', 'Diamonds', 'Hearts', 'Spades' ]
end
def values
@values = ('2'..'10').to_a + ['J','Q','K','A']
end
#just in case you want to shuffle your deck
def shuffle
@deck.shuffle!
end
end
require 'pp' #this makes the output prettier
new_deck = Deck.new
pp new_deck.deck #calls your current deck so you can see it
当前,@卡
阵列的输出很难读取,并且包含对象信息。我想我会提供一个我刚刚想出的替代方案,希望它能有所帮助:
class Deck
attr_writer :suits, :values
attr_accessor :deck
def initialize
suits
values
generate_deck
shuffle
end
def generate_deck
@deck = []
@suits.each do |suit|
@values.each { |value| @deck << [suit, value] }
end
end
def suits
@suits = ['Clubs', 'Diamonds', 'Hearts', 'Spades' ]
end
def values
@values = ('2'..'10').to_a + ['J','Q','K','A']
end
#just in case you want to shuffle your deck
def shuffle
@deck.shuffle!
end
end
require 'pp' #this makes the output prettier
new_deck = Deck.new
pp new_deck.deck #calls your current deck so you can see it
甲板类中是否“初始化”了一个输入错误?您的@cards
数组中填充了实例变量。。。不太明智,所以我认为你需要重新考虑这一点。可能会尝试以一个数组结束,比如@cards
=[[S,2],[S,3]…等等]。我想要这样一个目的。我希望每张卡片都是唯一的对象。卡片组类中是否“初始化”了打字错误?您的@cards
数组中填充了实例变量。。。不太明智,所以我认为你需要重新考虑这一点。可能会尝试以一个数组结束,比如@cards
=[[S,2],[S,3]…等等]。我想要这样一个目的。我希望每张卡片都是独一无二的。你说得对。在Card类中编辑to_s方法后,它就可以工作了。非常感谢。几分钟后我会选择你的答案。你是对的。在Card类中编辑to_s方法后,它就可以工作了。非常感谢。几分钟后我会选择你的答案。你是对的。对不起,我先看到了另一个答案。你说得对。很抱歉,我先看到了另一个答案。是的,我编辑了to_的方法,效果很好。谢谢你的选择。是的,我编辑了to_的方法,效果很好。谢谢你的选择。