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,对象的类。

如果你真的想它来指30factors方法,你必须将它定义为一个实例方法,因为一个对象(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

回到顶部