Ruby中方法参数后添加冒号的含义是什么?
关于Ruby方法参数后加冒号的含义
你看到的initialize方法中参数后加冒号的写法,是Ruby 2.0及以上版本支持的必填关键字参数语法,和你之前了解的冒号在前的Symbol类型没有直接关系,属于方法参数的特殊定义规则,核心作用如下:
- 调用时必须显式指定参数名,不能按普通位置参数的顺序传值
实例化Purchaser类时只能用如下写法:
如果省略参数名直接按顺序传值Purchaser.new(consumable: "耗材A", account: "账号123", amount: 100, reason: "办公采购")Purchaser.new("耗材A", "账号123", 100, "办公采购"),会直接抛出参数错误。 - 调用时参数顺序可以任意调整,不需要严格匹配方法定义的参数顺序,代码可读性更高
如下写法也是完全合法的:Purchaser.new(account: "账号123", reason: "办公采购", amount: 100, consumable: "耗材A") - 默认为必填项,漏传任意参数都会抛出
ArgumentError;如果需要设置为可选关键字参数,给参数加默认值即可:# reason参数可选,不传的话默认值为nil def initialize(consumable:, account:, amount:, reason: nil)
另外补充说明:你代码中purchase.update(account: account, amount: amount, reason: reason)这类写法是Ruby Hash的简写语法,当Hash的键是Symbol、且值的变量名和键名一致时,可以简写为键名:的形式,等价于:account => account,和关键字参数的语法设计是呼应的。
内容的提问来源于stack exchange,提问作者Aalya Banu
相关产品推荐
相关产品推荐

