我是ruby的新手,我正在努力学习收益率如何运作。我使用yield以下列方式在函数的帮助下读取文件中的字符。该函数的返回值被输入到另一个基于空格提取单词的函数。但是,执行时出现以下错误:
in `block (2 levels) in getchars': no block given (yield) (LocalJumpError)
以下是代码段生成错误:
def getchars(file)
IO.readlines(file).each {|line| line.each_char {|chrc| yield chrc }}
end
有人可以帮我理解我做错了什么吗?感谢。
增加:
这就是我打电话的方式:
def getwords(file)
@st_char = true
getchars(file).each {|c|
if @st_char == true
@word = ""
if c.match(/^[[:alnum:]]+$/)
@word = c
@st_char = false
end
else
if c.match(/^[[:alnum:]]+$/)
@word = @word + c
else
@st_char = true
yield @word
end
end
}
end
答案 0 :(得分:1)
我认为错误消息非常明确:getchars
尝试yield
到块,但是调用getchars
的人都没有通过块。
在getwords
的第2行,您调用getchars
而不传递阻止。您需要将一个块传递给getchars
,因此它有yield
到。
答案 1 :(得分:1)
您需要将代码块传递给getchars
才能获得。
之类的,
getchars("example.txt") {|char| puts char}
然后在你的get chars中,它会一次一个地生成一个char到提供的代码块 - 只需puts
它们就可以了。
答案 2 :(得分:-1)
file_as_string = File.read("greetings.txt") # => "hey hello hola vanakam"
array_of_words_after_splitting_by_spaces = file_as_string.split(" ") # => ["hey", "hello", "hola", "vanakam"]
警告:请不要使用此类变量名称,只是用它来明确查看发生的事情