调用函数时能否为可选参数追加字符串?附Ruby代码示例问询
问题解答:Ruby中调用函数时给可选参数追加字符串
嘿,你尝试的test(two + 'bar')这种写法会直接报错哦😉。因为two是函数内部的参数名,在调用函数的外部上下文里根本没定义这个变量,Ruby会抛出NameError告诉你找不到two这个标识符。
那怎么实现你想要的「基于默认值追加字符串得到foobar」的效果呢?这里有几个实用的方案:
方案1:手动传入拼接后的字符串
最简单直接的方式,就是把默认值和要追加的字符串拼接好再传进去:
def test(two: 'foo') puts two end test(two: 'foo' + 'bar') # 输出 foobar
不过这个方法有个小缺点:你得重复写默认值'foo',如果之后函数的默认值要修改,所有调用的地方都得跟着改,维护起来有点麻烦。
方案2:把默认值抽成外部常量
如果想避免重复写默认值,可以把默认值定义成一个外部常量,函数和调用处都复用这个常量:
DEFAULT_TWO = 'foo' def test(two: DEFAULT_TWO) puts two end # 调用时基于常量拼接 test(two: DEFAULT_TWO + 'bar') # 输出 foobar
这样之后要改默认值,只需要修改DEFAULT_TWO这一处就够了,维护起来省心很多。
方案3:给函数新增一个追加参数(推荐)
更优雅的方式是直接在函数内部支持追加逻辑,新增一个可选的append参数(默认是空字符串),然后在函数里把两个值拼起来:
def test(two: 'foo', append: '') puts two + append end # 想输出默认值就直接调用 test() # 输出 foo # 想追加字符串就传append参数 test(append: 'bar') # 输出 foobar
这个方案最灵活,调用方不需要关心默认值是什么,只需要传要追加的内容就行,代码可读性也更高。
额外小技巧:动态获取函数默认参数(进阶)
如果你真的想在外部拿到函数的默认参数值再修改,可以用Ruby的Method#parameters方法来提取,但这个方法比较进阶,日常开发用前面的方案就足够了。举个例子:
def test(two: 'foo') puts two end # 提取默认参数值 default_two = method(:test).parameters.find { |type, name| name == :two }[2] test(two: default_two + 'bar') # 输出 foobar
不过这个写法有点绕,除非特殊场景,不然还是推荐前面的方案。
内容的提问来源于stack exchange,提问作者confused-perspective
相关产品推荐
相关产品推荐

