ruby class undefined method(NoMethodError)
不幸的是,我得到以下错误。我不明白为什么它不起作用?ruby class undefined method(NoMethodError)
:14:in `convert': undefined method `factors' for 30:Fixnum (NoMethodError) from question_stack.rb:18:in `<main>'
我试图创建下面的类:
# Class Wordgame class Wordgame
WORDGAME_MAP = {
'3' => 'baa',
'5' => 'bar',
'7' => 'bla'
}.freeze
def self.factors
(1..self).select { |n| (self % n).zero? }
end
def self.convert(number)
number.factors.map(&:to_s).each.map { |char| WORDGAME_MAP[char] }.join
end
end
Wordgame.convert(30)
我在做什么错?我的精神错误在哪里?
回答:
self
在类方法中引用类本身,或在实例方法中引用当前对象。在你的情况下,它指的是WordGame
,对象的类。
如果你真的想它来指30
到factors
方法,你必须将它定义为一个实例方法,因为一个对象(30
)上调用,而不是一个类(Integer
),打开Integer
类
class Integer def factors
(1..self).select { |n| (self % n).zero? }
end
end
我想你知道的另类:
def self.factors(x) (1..x).select { |n| (self % n).zero? }
end
def self.convert(number)
factors(number).map(&:to_s).each.map { |char| WORDGAME_MAP[char] }.join
end
或者更好的,面向对象编程。
class WordGame def initialize(n)
@n = n
end
def convert
factors.map(&:to_s).each.map { |char| WORDGAME_MAP[char] }.join
end
private
def factors
([email protected]).select { |m| (@n % m).zero? }
end
end
Wordgame.new(30).convert
以上是 ruby class undefined method(NoMethodError) 的全部内容, 来源链接: utcz.com/qa/258315.html