【问题标题】:Creating methods that allow bang and non-bang options创建允许 bang 和 non-bang 选项的方法
【发布时间】:2014-10-10 16:12:16
【问题描述】:

我想知道是否有可能创建一个方法,比如 Array#square(将数组中的元素平方),它允许可选的 bang ! 标识符?

这样,receiver 是否被永久修改只取决于方法是否被 bang 调用。例如,是否可以按照以下方式定义一种方法:

class Array
  def square(!)
    #code
  end
end

或者,有必要创建两个这样的方法吗?

class Array
  def square
    #code
  end
  def square!
    #code
  end
end

【问题讨论】:

  • 你的例子没有任何意义。 #sum 是没有办法修改数组的。因此#sum!毫无意义。
  • 你必须创建两个方法。 ! 是方法名的一部分,不能作为参数。
  • 我为这个可怜的例子道歉。例如,将数组中的元素平方是一个更好的选择。我会尝试编辑帖子。谢谢。

标签: ruby methods


【解决方案1】:

按照惯例分别定义两个方法,其中非危险版本在副本上调用 bang 方法:

class Array
  def square
    dup.square!
  end
  def square!
    #code
  end
end

【讨论】:

  • 谁对正确答案投了反对票?承认自己或面对我的愤怒。
  • 谁投了反对票?刚刚获得投票权并想行使他们新发现的权力的人。我出于恶意添加了 +1,因为这是一个很好的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2021-03-01
  • 2021-12-04
相关资源
最近更新 更多