我是Ruby的新手,遇到一些令我困惑的东西. @H_@R_301_449@_12@我在方法签名中设置一个默认参数值. @H_@R_301_449@_12@调用该方法时,我将一个零参数传递给该参数. @H_@R_301_449@_12@但默认值未分配;它仍然是零.
# method with a default value of 1000 for parameter 'b' def format_args(a,b=1000) "\t #{a.ljust(30,'.')} #{b}" end # test hash dudes = {}; dudes["larry"] = 60 dudes["moe"] = nil # expecting default parameter value puts "Without nil check:" dudes.each do |k,v| puts format_args(k,v) end # forcing default parameter value puts "With nil check:" dudes.each do |k,v| if v puts format_args(k,v) else puts format_args(k) end end@H_@R_301_449@_12@输出:
Without nil check: larry......................... 60 moe........................... With nil check: larry......................... 60 moe........................... 1000@H_@R_301_449@_12@这是预期的行为吗? @H_@R_301_449@_12@我错过了什么ruby-foo? @H_@R_301_449@_12@看起来像nil是不一样的“没有价值”,我习惯于在其他语言中考虑null.
解决方法
当不提供参数时,使用默认参数.
@H_@R_301_449@_12@如果你提供它为零,那么它将是零.所以是的,这是预期的行为.