美文网首页
ruby 方法调用中的*和&

ruby 方法调用中的*和&

作者: SecondRocker | 来源:发表于2016-03-13 23:09 被阅读293次

    在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 方法调用中的*和&

          本文链接:https://www.haomeiwen.com/subject/kskflttx.html