![](/img/trans.png)
[英]Ruby NoMethodError (undefined method ''…' for '…:Class'
[英]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
。
如果您確實希望它在factors
方法中引用30
則必須將其定義為實例方法,因為調用了對象( 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
或者更好,使用OOP。
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
(1..@n).select { |m| (@n % m).zero? }
end
end
Wordgame.new(30).convert
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.