使用Proc或Module

时间:2014-11-12 09:09:25

标签: ruby rspec module proc

我想使用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")

2 个答案:

答案 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