4

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

どうすればこれを達成できますか?

4

3 に答える 3

7

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
于 2012-04-28T02:28:14.043 に答える
1

何が欲しいのか完全にはわかりません。

文字列のインスタンスを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"
于 2012-04-28T02:45:19.267 に答える
0

シングルトン法

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
于 2012-04-28T02:30:33.437 に答える