【发布时间】:2013-08-30 20:42:13
【问题描述】:
我认为必不可少的一个编程语言功能是自动打印缺少的命名参数,因为它使调试更加容易。
但是,我还没有找到在 Ruby 中执行此操作的简单方法。此代码示例打印 wrong number of arguments (1 for 3) (ArgumentError) 而不是打印每个缺失参数的名称:
def add_three_numbers(num1, num2, num3)
puts(num1 + num2 + num3)
end
add_three_numbers(num2:3)
我找到了一种打印丢失的函数参数名称的方法,但它非常冗长和冗余:有没有一种不太冗余的方法来打印丢失的函数参数的名称?
def add_three_numbers(num1=nil, num2=nil, num3=nil)
errorToPrint = ""
if(num1 == nil)
error_to_print += "num1 is undefined, "
end
if(num2 == nil)
error_to_print += "num2 is undefined, "
end
if(num3 == nil)
error_to_print += "num3 is undefined, "
end
if(error_to_print != "")
throw error_to_print
end
puts(num1 + num2 + num3)
end
add_three_numbers(num1:1)
【问题讨论】:
-
@AndersonGreen 虽然您可以编写camelCase 或snake_case,但如果您坚持使用snake_case,您的代码将与Ruby 库(包括标准库)和作者更加一致。
-
为什么参数的名称是必不可少的?这里真正的问题是什么?您可能会因为这看起来很愚蠢而投反对票(例如“如果
def关键字大写,我会更喜欢它——有什么办法吗?”)。 -
@Chuck 记住函数的每个参数的名称并不总是那么容易,尤其是在函数有很多参数的情况下。这就是为什么每当我调用带有命名参数的函数时,我都需要查看缺失参数的名称。
-
@AndersonGreen:听起来您需要一个工具来显示参数当您编写调用时,而不是显示参数名称的错误消息在运行时忘记了。你会说这是在轨道上吗?
-
已订购,您知道缺少哪一个。此外,nil 可能是一个有效值。命名参数在 Ruby 2 之前甚至不存在。如果正常测试不足以在无数小时之前捕捉到这些错误,我会有点惊讶。