我是Ruby的新手,遇到一些令我困惑的东西.
我在方法签名中设置一个默认参数值.
但默认值未分配;它仍然是零.
# 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
输出:
Without nil check: larry......................... 60 moe........................... With nil check: larry......................... 60 moe........................... 1000
这是预期的行为吗?
我错过了什么ruby-foo?
看起来像nil是不一样的“没有价值”,我习惯于在其他语言中考虑null.
解决方法
当不提供参数时,使用默认参数.
如果你提供它为零,那么它将是零.所以是的,这是预期的行为.