假设一个函数定义如下:
def composition(text : String, k : Int32) : Array(String)
kmers = Array(String).new
(0 .. text.size - k).each do |i|
kmers << text[i, k]
yield text[i, k]
end
return kmers
end
如何检查函数内部是否给出了块参数?
如果给出了 block 参数,将产生 kmers。如果未给出,kmers 将以字符串数组的形式返回。
这样的检查是不可能的,因为接受块的方法(使用yield
任何地方)已经有一个需要它的签名。但这也意味着您不需要支票。如果你想让它成为可选的,只需创建两个方法,如下所示:
# if you want to be explicit (makes no difference, this method requires a block):
# def composition(text : String, k : Int32, &block)
def composition(text : String, k : Int32)
(0 .. text.size - k).each do |i|
yield text[i, k]
end
end
# and the non block option
def composition(text : String, k : Int32) : Array(String)
kmers = [] of String
composition(text, k) do |s|
kmers << s
end
return kmers
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)