首页 > 解决方案 > 在 Ruby 中按方法调用方法

问题描述

我有一个以我需要的格式生成电话号码的模块。

module PhoneNumber
  def self.prefix
    '+'
  end
  def self.country
    rand(1..9).to_s
  end
  def self.code
    rand(100..999).to_s
  end
  def self.number
    rand(1000000..9999999).to_s
  end
end

我使用它如下。或作为格式化字符串"#{}#{}"

phone_number = PhoneNumber.prefix +
               PhoneNumber.country +
               PhoneNumber.code +
               PhoneNumber.number

我想以这种方式重写模块的主体,以便我可以以点格式使用它。

PhoneNumber.prefix.code.number

标签: rubymodule

解决方案


我同意托德的观点,你不应该这样做;对于阅读代码的人(包括将来的您自己)来说,实施和混淆会很尴尬,因为这不是编写您正在谈论的那种操作的典型方式。

也就是说,如果您真的想这样做,您将需要提供一个调用的方法,该方法prefix返回另一个具有方法的对象,code依此类推,沿链存储状态并在最后组合字符串。如果您想交换订单,它会变得更加复杂。

强烈推荐一个看起来像这样的方法:

PhoneNumber.build(:prefix, :code, :number)

推荐阅读