一种少见的 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 传参方法

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

  • Mybatis mapper文件中传递多个参数的4种方式

    方法1:顺序传参法 方法2:@Param注解传参法 方法3:Map传参法 方法4:Java Bean传参法

  • vue路由传参

    原生JS 传参 Vue 传参 使用 传参数 第一种方法 第二种方法 点击事件传参 第三种...

  • spring mvc学习

    controller传参GET方法传参@requestParam(value="s",requried=false...

  • 关于vue跳转页面传参问题

    做页面跳转传参的时候,有两种方式,一种是params传参,一种是query传参,query传参类似于get请求,会...

  • Python中的参数传递都有哪些

    大体上分为三种(位置传参和关键字传参以及综合传参)位置传参又包含普通位置传参和序列传参(也是位置传参的一种)关键字...

  • 微信小程序页面之间传参

    微信小程序页面之间的传参方法有四种 1.页面url传参2.data-属性传参3.缓存传参4.全局变量传参 1.页面...

  • vue路由传参.md

    两种传参方法 1.命名路由传参(name, params方式) 2.路由路径传参(path, query方式...

  • 实现apply、call、bind方法

    apply方法传参是数组形式,call传参方式是直接传入参数列表 1、实现apply方法 实现call方法 实现的...

  • iOS和Unity交互之参数传递

    1. 调用方法一 Unity调方法传参,有返回值 如果Unity传参为string类型,不执行strdup()方法...

网友评论

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

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