2011-05-05 66 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