Ruby:什么是最好的方法来反对一个方法的一个参数?

Ruby:什么是最好的方法来反对一个方法的一个参数?,ruby,Ruby,考虑一个类的方法,该方法过去接收2个参数,但现在在新版本中不再需要该参数。反对此方法的参数的最佳方法是什么 Ruby stdlib有一个deprecate方法,该方法将拒绝整个方法,但我仍然希望该方法存在,它只是不需要它用来接收的参数之一,并且已经是可选参数 举个例子 类日期验证程序 定义日期有效?(日期字符串,fmt=“%Y-%m-%d”) #任何不再寻找“fmt”的支票 终止 如果我只是不赞成这个方法,即使有人在没有传递第二个参数的情况下调用该方法,也会发送一个不赞成警告 我想很快改变方法

考虑一个类的方法,该方法过去接收2个参数,但现在在新版本中不再需要该参数。反对此方法的参数的最佳方法是什么

Ruby stdlib有一个
deprecate
方法,该方法将拒绝整个方法,但我仍然希望该方法存在,它只是不需要它用来接收的参数之一,并且已经是可选参数

举个例子

类日期验证程序
定义日期有效?(日期字符串,fmt=“%Y-%m-%d”)
#任何不再寻找“fmt”的支票
终止
如果我只是不赞成这个方法,即使有人在没有传递第二个参数的情况下调用该方法,也会发送一个不赞成警告

我想很快改变方法arity来显式地ommit参数,但我想在新版本中这样做,我不想破坏与仍然传递第二个参数的类的兼容性,即使这不再是必需的


那么,在本例中,警告第二个参数被弃用的最佳方法是什么呢?

您可以检查第二个参数是否是这样提供的:

  def date_valid?(date_string, fmt=nil)
    if fmt
      warn "second argument to `date_valid?` is deprecated (#{caller[-2]})"
    end
    fmt ||= "default value"
    # ... 
  end

但正如我在一篇评论中提到的,我完全不知道为什么要反对第二个参数(毕竟它是可选的),除非用户不自定义此值很重要,

fmt
参数默认为零,如果它被给出,则显示警告。@maxpleaner这确实是一个很好的观点。。。简单但正确!你介意把你的评论作为回答吗?否则,我将无法将问题标记为已回答什么类有一个方法
deprecate
?允许用两个参数调用新方法,在这种情况下,您将忽略其中一个参数并发出警告,这是一个丑陋且潜在危险的难题。最安全的方法是只接受一个参数,允许在尝试传递两个参数时引发异常,并跟踪并修复当前使用两个参数调用该方法的整个代码库部分。请注意,如果警告只是众多消息中的一条,则很容易被忽略。我可以给出一个答案,它非常简单,但我想知道您为什么要反对它。第二个参数已经是可选的(它有一个默认值),因此使用1或2个参数调用它仍然有效。除非您真的不想让用户指定此值。目的是要明确,以前是可选的参数,现在甚至不再使用。检查是否已通过并发送
警告
将非常有效。。。然后在未来的主要版本中,第二个参数将被完全删除。我只是在寻找部件之间的平滑集成。。。使用类似于“在正确的方向上指导”的方法,在当前版本中发出警告,然后在主要版本中“惩罚”引发异常