2

我认为必不可少的一项编程语言功能是自动打印缺少的命名参数,因为它使调试变得更加容易。

但是,我还没有找到在 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)
4

3 回答 3

0

虽然我同意它确实使事情变得更清晰,但值得注意的是,Ruby 不这样做的原因可能是因为它很难,也许很难做到正确。

如果问题看起来很简单,那是因为示例很简单。Sawa 提出的解决方案可能像宣传的那样有效,但我可以想办法定义这不起作用的方法。

感觉有点像你在与语言的结构作斗争以恢复你习惯的东西,当你尝试一门新语言时,这是很自然的。我鼓励你暂时放下它,顺其自然,等你掌握了更多的 Ruby 之后再回来。

Ruby 有一些很棒的调试和文档工具,可以让查找丢失的方法参数名称变得简单。查看riRDoc 和 gem server,所有这些都随 Ruby 一起提供。如果你想要更深入的东西,我也可以推荐debugger

于 2013-08-27T23:16:36.577 回答
0

除非你想破解 Ruby 并编译你自己的自定义版本,否则没有办法做到这一点。

如果您的问题只是记住方法的参数是什么,大多数主要的编程编辑器都有一些“跳转到定义”功能。例如,我倾向于使用 Sublime Text。如果我需要记住方法的参数是什么,我只需点击 command-option-down,它就会显示方法定义。

于 2013-08-27T23:41:10.453 回答
0

这里给出了这个问题的简明解决方案,所以我将它分享给所有未来的人。

def add_three_numbers num1 = nil, num2 = nil, num3 = nil
  undefined = local_variables.select{|var| eval(var.to_s).nil?} - [:undefined]
  puts "#{undefined.join(", ")} are undefined" unless undefined.empty?
end

add_three_numbers
# => num1, num2, num3 are undefined

add_three_numbers(1)
# => num2, num3 are undefined

答案已被原发帖者删除,但现已恢复。

于 2013-08-28T02:09:37.653 回答