ruby 方法调用中的*和&

在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]
  • &可将Proc或lambda转为块
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}

你可能感兴趣的:(ruby 方法调用中的*和&)