2011-05-05 67 views
1

我有一個方法梁2 - 通過參數wicked_pdf基於服務器操作系統

def welcome(*args) 
    #....some code 
end 

基於一個情況下,我不得不有時調用此方法作爲

welcome(arg1,arg2) {|block| #code} 

但有時我想調用

welcome(arg1) {|block| #code} 

對於兩個呼叫塊的部分是相同的

請幫我幹起來這段代碼,實現的功能

編輯

對不起,不顯示此更早

我想實現wicked_pdf插件安裝到我的Rails應用程序。它具有以下代碼

Open3.popen3(command_for_stdin_stdout,"b") do |stdin, stdout, stderr| 
     stdin.write(string) 
     stdin.close 
     pdf = stdout.read 
     raise "PDF could not be generated!\n#{stderr.read}" if pdf.length == 0 
     pdf 
end 

傳遞給方法,即第二個參數,如果服務器運行在Windows上的「B」時,才需要,否則就沒有必要參數。當我試圖傳遞一個空值時,它不會生成pdf。我試着這樣做

Open3.popen3(command_for_stdin_stdout,(["i386-mingw32","mswin","win32","mingw","bccwin","cygwin"].include?(RUBY_PLATFORM) ? "b" : "")) 
.......#rest of the code 

感謝

+0

wicked_pdf的當前版本,使標準輸入,標準輸出,標準錯誤和在binmode調用open3裏面,我很好奇,看看這使得你的補丁不再需要。 – Unixmonkey 2011-07-13 15:52:09

回答

1
def welcome(arg1, arg2="default") 
    ... 
end 

,你可以把它叫做無論哪種方式,和ARG2將是默認值,如果不是由主叫方設定。

4

沒有問題!塊參數在Ruby方法中獲得自己的插槽,因此同時擁有splatted參數是完全安全的。

def welcome(*args) 
    puts args.inspect 
    yield 
    #....some code 
end 

welcome "asdf", "asdf" do 
    puts "uh-oh" 
end 

welcome "just one" do 
    puts "still works?" 
end 
0
welcome(:arg1 => arg1, :arg2 => arg2) {|blockety|block} 

ARGS結束是

{:arg1 => arg1, :arg2 => arg2} 

歡迎方法內。然後,你抓住他們,你從哈希需要他們

0

我的解決辦法:

open_options = [command_for_stdin_stdout, ("b" if ENV['OS'] == 'Windows_NT')].compact 
Open3.popen3(*open_options) do |stdin, stdout, stderr| 
    ... 
end