Named parameters in Ruby 2

后端 未结 8 1766
闹比i
闹比i 2020-12-13 13:28

I don\'t understand completely how named parameters in Ruby 2.0 work.

def test(var1, var2, var3)
  puts \"#{var1} #{var2} #{var3}\"
end

test(var3:\"var3-ne         


        
8条回答
  •  南笙
    南笙 (楼主)
    2020-12-13 14:03

    As of Ruby 2.1.0, you no longer have to set default values for named parameters. If you omit the default value for a parameter, the caller will be required to provide it.

    def concatenate(val1: 'default', val2:)
      "#{val1} #{val2}"
    end
    
    concatenate(val2: 'argument')
    #=> "default argument"
    
    concatenate(val1: 'change')
    #=> ArgumentError: missing keyword: val2
    

    Given:

    def test1(var1="default value123")
      var1
    end
    
    def test2(var1:"default value123")
      var1
    end
    

    They'll behave the same way when not passed an argument:

    test1
    #=> "default value123"
    
    test2
    #=> "default value123"
    

    But they'll behave much differently when an argument is passed:

    test1("something else")
    #=> "something else"
    
    test2("something else")
    #=> ArgumentError: wrong number of arguments (1 for 0)
    
    
    test1(var1: "something else")
    #=> {:var1=>"something else"}
    
    test2(var1: "something else")
    #=> "something else"
    

提交回复
热议问题