Ruby 私有方法`选择';调用nil:NilClass(nomethoderor)
我是ruby新手,希望能得到一些帮助:) 我修复了ruby代码中的错误,但我不明白为什么修复会起作用 当我在下面的行中键入时,我得到以下错误为nil:NilClass(NoMethodError)调用的私有方法'select':Ruby 私有方法`选择';调用nil:NilClass(nomethoderor),ruby,class,Ruby,Class,我是ruby新手,希望能得到一些帮助:) 我修复了ruby代码中的错误,但我不明白为什么修复会起作用 当我在下面的行中键入时,我得到以下错误为nil:NilClass(NoMethodError)调用的私有方法'select': scanned = @keywords.select { |key| key.match(word) } ,它位于以下方法中: def find(word) return {} unless @entries.any? scanned = @keywo
scanned = @keywords.select { |key| key.match(word) }
,它位于以下方法中:
def find(word)
return {} unless @entries.any?
scanned = @keywords.select { |key| key.match(word) }
found ={}
if scanned.any?
scanned.each do |x| found.merge!( { x => @entries[x] } )
end
else
{}
end
found
end
,但如果我将上面的错误行替换为以下内容,则此错误将消失:
scanned = @entries.keys.sort.select { |key| key.match(word) }
我在下面的类结构中将@keywords定义为@keywords=@entries.keys.sort为什么我不能使用“.”在@keywords上选择“但我可以在@keywords”内容上使用它?
class Dictionary
def initialize
@entries = {}
end
def entries
@entries
end
def add(entry)
@entries = entry.is_a?(Hash) ? @entries.merge!(entry) : @entries.merge!( {entry => nil} )
end
def keywords
@keywords = @entries.keys.sort
end
def include?(keyword)
@entries.keys.include?(keyword)
end
def find(word)
return {} unless @entries.any?
scanned = @keywords.select { |key| key.match(word) }
found ={}
if scanned.any?
scanned.each do |x| found.merge!( { x => @entries[x] } )
end
else
{}
end
found
end
def printable
printable = @entries.sort.map do |key, value| %Q{[#{key}] "#{value}"}
end
printable.join("\n")
end
end
您从未调用方法
关键字
,因此,您从未执行用数据填充@keywords
的代码。它将保持为零。@关键字将保持为零,直到调用方法keywords
,该方法将@keywords初始化为已排序的条目键
看起来您正在对字典对象调用
find
,而没有首先调用关键字。这将导致@keywords的值为零。JTG!谢谢你的帮助!我真的很感激!我会投票,但我是新手,没有足够的分数:)