在ruby方法定義、調(diào)用中姑丑,*可以把數(shù)組轉(zhuǎn)化為參數(shù)蛤签,&可以把Proc或lambda轉(zhuǎn)化為塊,在開發(fā)中可以起到很好的作用
- 可以在定義方法時使用栅哀,可定義不定長度參數(shù)震肮;也可在方法調(diào)用時在數(shù)組前傳遞,將數(shù)組轉(zhuǎn)為參數(shù)
#定義不定長方法
def do_it *args
#args為數(shù)組
puts args.join(',')
end
do_it 1,2,3 #輸出 1,2,3
do_it 1,2,3,4 #輸出1,2,3,4
# *轉(zhuǎn)化數(shù)組為參數(shù)
def can_pass_array(a,b,c,d)
puts "#{a}|#昌屉|#{c}|#bpplpni"
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轉(zhuǎn)為塊
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}
#將傳入的塊轉(zhuǎn)為Proc用于其他方法
def method2 &block
other_method(block) #block為Proc
end
methods{|x| puts x}