在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}