我想使用Proc,但我不知道如何在数组迭代器中调用Proc。如果可能的话,您是否也可以建议如何使用MODULES进行此操作?
电除尘器。部分“结果<<(p.call(x))
def translate (str)
word = str.split(" ")
result = []
word.each do |x|
result << (p.call(x))
end
result.join(" ")
end
p = Proc.new do |single_word|
temp_array = single_word.split('')
num = ( single_word =~ /[aeiou]/)
num.times do
temp = temp_array.shift
temp_array << temp
end
temp_array << "ay"
temp_array.join("")
end
translate("best")
答案 0 :(得分:2)
不确定我是否理解您的目的,但可能只是:
def translate(str, p)
...
end
...
translate("best", p)
这也可以通过&amp; block完成,但我不明白为什么你需要在示例中使用proc或block。
答案 1 :(得分:2)
如果你想在一个方法中使用一段代码,而不需要传递它(意味着它不是动态决定的) - 为什么不简单地使用一个方法?
def translate (str)
word = str.split(" ")
result = []
word.each do |x|
result << translate_word(x)
end
result.join(" ")
end
def translate_word(single_word)
temp_array = single_word.split('')
num = ( single_word =~ /[aeiou]/)
num.times do
temp = temp_array.shift
temp_array << temp
end
temp_array << "ay"
temp_array.join("")
end
translate("best")
如果你想在一个模块中声明它,你可以通过包含它来实现它:
<强> word_translator.rb 强>
module WordTranslator
def translate_word(single_word)
temp_array = single_word.split('')
num = ( single_word =~ /[aeiou]/)
num.times do
temp = temp_array.shift
temp_array << temp
end
temp_array << "ay"
temp_array.join("")
end
end
<强> translator.rb 强>
require 'word_translator.rb'
class Translator
include WordTranslator
def translate (str)
word = str.split(" ")
result = []
word.each do |x|
result << translate_word(x)
end
result.join(" ")
end
end
或者,将其声明为类方法:
<强> word_translator.rb 强>
module WordTranslator
def self.translate_word(single_word)
temp_array = single_word.split('')
num = ( single_word =~ /[aeiou]/)
num.times do
temp = temp_array.shift
temp_array << temp
end
temp_array << "ay"
temp_array.join("")
end
end
<强> translator.rb 强>
require 'word_translator.rb'
class Translator
def translate (str)
word = str.split(" ")
result = []
word.each do |x|
result << WordTranslator.translate_word(x)
end
result.join(" ")
end
end