Ruby 私有方法`选择';调用nil:NilClass(nomethoderor)

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

我是ruby新手,希望能得到一些帮助:)

我修复了ruby代码中的错误,但我不明白为什么修复会起作用

当我在下面的行中键入时,我得到以下错误为nil:NilClass(NoMethodError)调用的私有方法'select'

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!谢谢你的帮助!我真的很感激!我会投票,但我是新手,没有足够的分数:)