ruby - 我可以重载/创建后缀一元运算符吗?

标签 ruby

我想为 ruby​​ 中的 Numeric 类创建两个一元后缀运算符 !!!。到目前为止我已经这样定义了它

class Numeric
  def !
    (1..self).inject(:*)
  end

  def !!
    if self.even?
      (2..self).step(2).inject(:*)
    else
      (1..self).step(2).inject(:*)
    end
  end
end

但是,这意味着我必须调用 5.!5.!!。我知道您可以定义一元前缀运算符,例如 +@-@,但我想知道我是否可以定义一元后缀运算符以便调用 5!5!! 而不是 5.!5.!!

最佳答案

没有。首先,Ruby 中没有后缀运算符,因此解析器无法识别。其次,即使我们有后缀运算符,结尾的感叹号也是方法名称的一部分,所以如果您的程序中有 foo!,它会被解释为方法 foo!,而不是应用了 !foo

关于ruby - 我可以重载/创建后缀一元运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40733284/

相关文章:

ruby - 有没有办法改变错误消息的显示方式?

Ruby 在转换后的 JSON 哈希数组中按名称查找键

ruby - 如何在运行时在冰糕中的 `prop` 上动态定义 `T::Struct` s?

ruby-on-rails - 如何防止错误 "code converter not found (UTF-8)"?

ruby-on-rails - Ruby on Rails bundle 降级

Ruby 需要模块、库

ruby - 如何在不同文件中使用 Rspec shared_examples?

Ruby - 从哈希数组中提取每个键的唯一值

javascript - 如何在 Ruby 中使用 selenium-webdriver/capybara 截取完整的浏览器页面及其元素?

css - tr 是否限制特定类 Ruby Nokogiri