所以我收到了错误消息"未定义的方法' ip_histogram' for#(NoMethodError)"使用以下代码
class CommonLog
def initialize(logfile)
@logfile = logfile
end
def readfile
@readfile = File.readlines(@logfile).map { |line|
line.split()
}
@readfile = @readfile.to_s.split(" ")
end
def ip_histogram
@ip_count = 0
@readfile.each_index { |index|
if (@readfile[index] =~ /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/ )
puts @readfile[index]
puts @ip_count += 1
end
}
end
end
my_file = CommonLog.new("test_log")
cleaned_file = my_file.readfile
puts cleaned_file.ip_histogram
我试图读入数组并使用正则表达式进行检查。如果我从方法中取出代码并将其放入主程序中,它就可以工作,但我想知道为什么它不能用作方法。
答案 0 :(得分:3)
您将CommonLog#readfile
的结果分配给新变量cleaned_file
。你没有提供任何输入,但我现在假设@readfile是array
。
这意味着你的代码将假设ip_histogram
类上有一个实例方法Array
,而实际上却没有。
您只是想按顺序运行这些以获得您之后的结果:
clog = CommonLog.new("test_log")
clog.readfile
clog.ip_histogram
这里的主要区别是我们不使用readfile
的返回值,因为它只需要设置ip_histogram
方法中的变量就可以工作。
答案 1 :(得分:0)
my_file.readfile
的返回值是一个数组。除非您在ip_histogram
课程中定义了Array
,否则您无法在cleaned_file
上调用它。
在ip_histogram
上定义Array
(定义与您的代码不同):
class Array
def ip_histogram
...
end
end