Ruby的方法链接(Ruby Method Chaining)

2019-09-16 19:58发布

我想链的Ruby我自己的方法。 而不是编写Ruby的方法和使用它们像这样:

def percentage_to_i(percentage)
  percentage.chomp('%')
  percentage.to_i
end

percentage = "75%"
percentage_to_i(percentage)
=> 75

我想用这样的:

percentage = "75%"
percentage.percentage_to_i
=> 75

我怎样才能做到这一点?

Answer 1:

你的方法添加到String类:

class String
  def percentage_to_i
    self.chomp('%')
    self.to_i
  end
end

有了这个,你可以得到你想要的输出:

percentage = "75%"
percentage.percentage_to_i # => 75

这是一种无用的,因为to_i会为你已经:

percentage = "75%"
percentage.to_i # => 75


Answer 2:

这不是完全清楚你想要什么。

如果您希望能够将字符串转换to_i的实例,那么只需要调用to_i:

"75%".to_i  => 75

如果你想让它有一些特殊的行为,那么猴子修补String类:

class String
    def percentage_to_i
        self.to_i    # or whatever you want
    end
end

如果你真的想链方法,那么你通常要返回相同类的修改实例。

class String
    def half
        (self.to_f / 2).to_s
    end
end

s = "100"
s.half.half   => "25"


Answer 3:

辛格尔顿方法

def percentage.percentage_to_i
  self.chomp('%')
  self.to_i
end

创建自己的类

class Percent
  def initialize(value)
    @value = value
  end

  def to_i
    @value.chomp('%')
    @value.to_i
  end

  def to_s
    "#{@value}%"
  end
end


文章来源: Ruby Method Chaining