我正在尝试学习Ruby,我试图从另一个实例中调用一个实例方法。我的代码如下:
class ScanTextInFile
attr_accessor :content , :line_number
def content
@content
end
def line_number
@line_number
end
def content= (text)
@content = text
end
def line_number= (line)
@line_number = line
end
def initialize (content , line_number)
self.content = content
self.line_number = line_number
#self.calculate_word_frequency
end
def calculate_word_frequency
words = self.content.split
words_hash = Hash.new
words.each do | word |
word.downcase!
if words_hash.has_key?
words_hash[key] += 1
else
words_hash[key] = 1
end
highest_wf_count = words_hash.values.max
words_hash.each { |key, value| highest_wf_words.push(key) }
end
end
end
我正在尝试计算单词出现在给定字符串中的次数。我正在使用实例方法calculate_word_frequency
。当我注释掉对calculate_word_frequency
的调用时,代码运行良好
$ irb -I
irb(main):001:0> require_relative 'test'
=> true
irb(main):002:0>
irb(main):003:0*
irb(main):004:0* a = ScanTextInFile.new("Bla bla foo foo bar baz foo bar bar", 1)
=> #<ScanTextInFile:0x007fc7a39b01c8 @content="Bla bla foo foo bar baz foo bar bar", @line_number=1>
但是,当我在calculate_word_frequency
块中调用实例方法initialize
时,出现错误ArgumentError: wrong number of arguments (0 for 1)
$ irb -I
irb(main):001:0> require_relative 'test'
=> true
irb(main):002:0> a = ScanTextInFile.new("Bla bla foo foo bar baz foo bar bar", 1)
ArgumentError: wrong number of arguments (0 for 1)
我尝试在调用方法时删除self
,但我仍然遇到错误。当我调用方法时,我不知道出了什么问题。这样做的正确方法是什么?
答案 0 :(得分:2)
错误在这里非常具有描述性,在第32行你有这个:
if words_hash.has_key?
方法Hash#has_key?
要求您传入一个参数,如some_hash.has_key?("a_key")
我认为您的意思是这样使用它:words_hash.has_key?(word)
。
答案 1 :(得分:2)
改变这个:
if words_hash.has_key?
words_hash[word] += 1
else
words_hash[word] = 1
end
要:
if words_hash.has_key? word
words_hash[word] += 1
else
words_hash[word] = 1
end
您正在使用Hash#has_key方法而不提供key
参数,这就是它失败的原因。
答案 2 :(得分:1)
如果您正在使用attr_accessor
,则无需为实例变量定义getter和setter。使用attr_accessor
的全部意义在于它可以为您完成。 :)此外,getter和setter通常只被外部类和模块用来访问实例变量;在类中,只需直接访问实例变量。最后,您没有告诉has_key?
要查找的密钥,您正在混淆key
和word
,并且您正在引用数据结构{ {1}}在任何地方都没有定义。
这是您班级的修订版。我不确切地理解你正在尝试做什么 - 看起来你还在编写算法 - 但希望这足以让你继续前进并继续工作:
highest_wf_words