我正在用ruby创建一个程序,这是我的语言新手,想知道如何将数据从私有方法返回到公共方法,以便在显示数据时调用该方法
我在线上四处看看,但是由于该语言是新手,所以我很难将自己看到的内容转换为我的代码中所需的内容
def display
# return calcutalateFrequencies data here
end
private
def calculateFrequencies
@text = text.downcase.chars.each do |c|
next if c =~ /\s/
@letters[c] += 1
end
end
答案 0 :(得分:4)
您可以只在public方法中调用private方法。
def display
calculateFrequencies
end
私有方法只是对象中的其他方法只能调用的方法,因此以上是calculateFrequencies
起作用的唯一方法(除非您使用的是类似send
的特殊方法)
答案 1 :(得分:3)
可以用许多不同的方式完成。由于您正在设置实例变量,因此您可以使用它们或按原样返回结果。
[我对代码进行了一些修改,以使其看起来更红润。]
def display
puts calculateFrequencies("foo bar")
# or puts @letters
end
private
def calculateFrequencies(text)
@text = text
@letters =
text.downcase.each_char.with_object(Hash.new(0)) do |c, letters|
next if c == " "
letters[c] += 1
end
end
答案 2 :(得分:0)
您已经稍微改变了问题,但是您需要考虑的事项:
each
做为
最后执行的语句(带或不带块)each
枚举返回。 使之工作的示例...
class FrequencyCalculator
def initialize(text)
@text = text
calculateFrequencies
end
def display
@letters
end
private
def calculateFrequencies
@letters = Hash.new(0)
@text.downcase.chars.each do |c|
next unless c =~ /\s/ # change from "if" to "unless" otherwise you're skipping letters
@letters[c] += 1
end
end
end
然后您可以做
frequency_calculator = FrequencyCalculator.new('Hello World')
frequency_calculator.display
或更紧凑
FrequencyCalculator.new('Hello World').display