如何判断Ruby方法参数是用户传入还是使用默认值?
判断Ruby方法参数是默认值还是用户主动传入的
在Ruby中,直接用nil作为默认参数时,没法区分用户主动传入的nil和方法自带的默认nil——两者在方法内部的取值完全一致。要实现你想要的逻辑,需要换一种方式标记默认值。
推荐方案:用唯一对象作为默认标记
定义一个全局唯一的对象当作默认值的标记,用户不可能传入这个对象,因此能通过判断参数是否等于该标记来区分场景:
# 定义唯一的默认标记对象 DEFAULT_MARKER = Object.new def json_prop(key, value = DEFAULT_MARKER) # 简化json_data的初始化逻辑 json_data ||= {} if value == DEFAULT_MARKER # 用户未传入value,执行默认逻辑返回已有值 json_data[key] else # 用户主动传入了值(包括传入nil的情况),执行赋值操作 json_data[key] = value end end
备选方案:通过参数个数判断
如果方法参数结构简单,也可以用arguments.length判断用户传入的参数数量:
def json_prop(key, value = nil) json_data ||= {} if arguments.length == 1 # 仅传入了key参数,走默认逻辑 json_data[key] else # 传入了两个参数,无论value是什么都执行赋值 json_data[key] = value end end
这种方法的局限性在于,若后续调整方法参数数量或支持关键字参数,逻辑容易出错,因此第一种方案更健壮。
内容的提问来源于stack exchange,提问作者taz mazia
相关产品推荐
相关产品推荐

