2015-09-07 27 views
0

我在廚師的食譜,像這樣如何紅寶石拉姆達轉換爲可重複使用的庫法

被稱爲像這樣

overwrite_properties.call("#{server_home}/config.orig/#{fname}", params) 

有一個方法,我的問題是如何轉換這到一個可從另一個模塊調用的可重用函數?

例如。

module HelperMod 
    def self.overwrite_properties(&block) 
     //etc 
    end 
end 

感謝

回答

1

這很簡單 - 一個lambda是一個匿名函數(沒有名字的函數)。您可以在模塊內將此轉換爲功能,像這樣:

module HelperMod 
    def self.overwrite_properties(tmpl_path, params) 
    attrs = {} 
    File.read(tmpl_path).split("\n").map do |line| 
     line = line.sub(/#.*$/, '').strip 
     j, v = line.split(/\s*=\s*/, 2) 
     attrs[j] = v if j 
    end 
    params.each {|j,v| v.nil? ? attrs.delete(j) : attrs[j] = v } 
    attrs.map {|j,v| "#{j}=#{v}\n" }.sort.join 
    end 
end 

HelperMod.overwrite_properties("#{server_home}/config.orig/#{fname}", params) 
+1

我會用'.',而不是''::對於方法調用,即'HelperMod.overwrite_properties(...)' – Stefan

+0

@stefan,更新 - thx。 –