为什么这个 class 定义会导致 NoMethodError?
Why does this class definition result in a NoMethodError?
我一直在寻找解决方案,但最相关的答案似乎是使用 self.
,我已经在这样做了;我无法以可以找到我做错了什么的方式来表达我的搜索。我正在定义一个 class 如下,但是当我尝试创建一个实例时,我得到
NoMethodError:
undefined method `valid_pegs?' for #<Code:0x00007fffc58d1608>
我试过将 valid_pegs?
定义为实例方法,如果我这样调用它就可以开始工作,但这对课程来说是个问题,我应该定义它作为一种 class 方法。
为什么它不起作用?
class Code
POSSIBLE_PEGS = {
"R" => :red,
"G" => :green,
"B" => :blue,
"Y" => :yellow
}
attr_reader :pegs
def self.valid_pegs?(peg_arr)
outcome = true
peg_arr.each {|peg| outcome = false if !POSSIBLE_PEGS.include?(peg.upcase)}
return outcome
end
def initialize(peg_arr)
if !self.valid_pegs?(peg_arr)
raise "Those are not all valid pegs"
else
@pegs = []
peg_arr.each {|peg| @pegs << peg.upcase}
end
end
end
你快到了!
if !self.class.valid_pegs?(peg_arr)
或
if !Code.valid_pegs?(peg_arr)
定义一个 self.function 方法(在本例中,self.valid_pegs)是一个 "class level" 或单例方法。
class 定义中使用的 "self" 只是对对象的引用。
我一直在寻找解决方案,但最相关的答案似乎是使用 self.
,我已经在这样做了;我无法以可以找到我做错了什么的方式来表达我的搜索。我正在定义一个 class 如下,但是当我尝试创建一个实例时,我得到
NoMethodError:
undefined method `valid_pegs?' for #<Code:0x00007fffc58d1608>
我试过将 valid_pegs?
定义为实例方法,如果我这样调用它就可以开始工作,但这对课程来说是个问题,我应该定义它作为一种 class 方法。
为什么它不起作用?
class Code
POSSIBLE_PEGS = {
"R" => :red,
"G" => :green,
"B" => :blue,
"Y" => :yellow
}
attr_reader :pegs
def self.valid_pegs?(peg_arr)
outcome = true
peg_arr.each {|peg| outcome = false if !POSSIBLE_PEGS.include?(peg.upcase)}
return outcome
end
def initialize(peg_arr)
if !self.valid_pegs?(peg_arr)
raise "Those are not all valid pegs"
else
@pegs = []
peg_arr.each {|peg| @pegs << peg.upcase}
end
end
end
你快到了!
if !self.class.valid_pegs?(peg_arr)
或
if !Code.valid_pegs?(peg_arr)
定义一个 self.function 方法(在本例中,self.valid_pegs)是一个 "class level" 或单例方法。
class 定义中使用的 "self" 只是对对象的引用。