gpt4 book ai didi

ruby - 如何在 Ruby 中从另一个类中调用一个实例方法?

转载 作者:数据小太阳 更新时间:2023-10-29 08:31:11 26 4
gpt4 key购买 nike

我正在尝试学习 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>

但是,当我在 initialize block 中调用实例方法 calculate_word_frequency 时,我收到一条错误消息: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 但我仍然遇到错误。当我调用该方法时,我不知道出了什么问题。执行此操作的正确方法是什么?

最佳答案

这里的错误非常具有描述性,在第 32 行你有这个:

  if words_hash.has_key?

方法Hash#has_key?要求您传入一个参数,如 some_hash.has_key?("a_key")

我想你的意思是像这样使用它:words_hash.has_key?(word)

关于ruby - 如何在 Ruby 中从另一个类中调用一个实例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33333299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com