Ruby允许默认值参数前置?与Python差异及实现原理问询
Ruby允许带默认值参数前置的原因
Ruby对方法参数的匹配逻辑和Python完全不同,核心在于它会优先保证**必填参数(无默认值的参数)**被赋值:
- 当调用方法时,Ruby会先把传入的实参按顺序分配给所有必填参数;
- 如果实参数量超过必填参数的数量,剩余的实参再按顺序分配给带默认值的可选参数;
- 如果实参刚好填充满必填参数,带默认值的参数就直接使用预设的默认值。
拿你给出的代码举例:
def greeting(name='Derek', country) print("Hello #{name} from #{country}") end greeting("USA")
这里country是必填参数,name是带默认值的可选参数。调用时传入的"USA"会被优先分配给必填的country,name则使用默认值'Derek',最终输出Hello Derek from USA。
而Python的参数匹配是严格按从左到右的顺序赋值,只要遇到带默认值的参数,后面的所有参数都必须也带默认值,否则会因为“必填参数在可选参数之后”的规则报错。
内容的提问来源于stack exchange,提问作者daremkd
相关产品推荐
相关产品推荐

