一种少见的 Ruby 传参方法

作者: 存在的寂静 | 来源:发表于2019-03-15 18:29 被阅读4次

    我们都知道,Ruby 支持多种传参方法,最常见的就是必选参数,可选参数,带默认值的参数以及命名参数。
    举个例子:

      def mm a, b=2, *c
        p [a, b, c]
      end
    

    这个方法定义了一个必选参数,一个带默认值的参数以及一个可选参数,让我们运行这个方法试试:

    mm(1)                                      # =>  [1, 2, []]
    mm(1,10)                                   #  =>  [1, 10, []]
    mm(1, 10, 20, 21)                         #=>  [1, 10, [20, 21]]
    

    再来让我们试试命名参数:

    def nn a: 3, b: 4
      p [a, b]
    end
    

    然后来运行一下:

    nn                      # =>  [3, 4]
    nn(a: 10)                # =. [10, 4]
    

    然而有这么一种情况:我们想使用命名参数,但又不想提供默认值,即调用函数时必须传入该参数,这个时候该怎么办呢?
    让我们来看看下面这个函数:

    def special(a:, b:2)
      p [a, b]
    end
    

    注意,第一个参数 a 后面没有任何值,这看起来视乎有点怪异,那我们来测试一下:

    special b: 4                              # => ArgumentError: missing keyword: a
    special a: 12, b: 10                      #=> [12, 10]
    special 12, b: 10                        # => ArgumentError: wrong number of arguments (given 1, expected 0)
    

    大家可以发现, a 是一个必选参数,并且传参的时候也必须以哈希的方式传入。这种传参方式比较少见,但确实适用于想用命名参数方式传参又要强迫调用者必须传入该参数的情况。这个小技巧大家 get 到了吗?

    相关文章

      网友评论

        本文标题:一种少见的 Ruby 传参方法

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