ruby 方法调用中的*和&

2016-03-13  本文已影响293人  SecondRocker

在ruby方法定义、调用中,*可以把数组转化为参数,&可以把Proc或lambda转化为块,在开发中可以起到很好的作用

#定义不定长方法
def do_it *args
#args为数组
    puts args.join(',')
end
do_it 1,2,3 #输出 1,2,3
do_it 1,2,3,4 #输出1,2,3,4
# *转化数组为参数
def can_pass_array(a,b,c,d)
   puts "#{a}|#{b}|#{c}|#{d}"
end
can_pass_array *[1,2,3,4] #输出 1|2|3|4

工作中的一个例子

sql,sql_array = " 1 = 1",[]
unless params[:status].blank?
   sql += " and status = ?"
   sql_array << params[:status]
end
unless params[:inquire_state].blank?
   sql += " and inquire_state = ? "
   sql_array << params[:inquire_state]
end
Task.all :conditions => [sql,*sql_array]
def method_with_block
    yield(3) if block_given?    
end
#输出 3
method_with_block &Proc.new{|x| puts x}
method_with_block &lambda{|x| puts x}
#将传入的块转为Proc用于其他方法
def method2 &block
    other_method(block) #block为Proc
end
methods{|x| puts x}
上一篇下一篇

猜你喜欢

热点阅读