2012-04-28 81 views
4

我想在Ruby中鏈接自己的方法。而不是編寫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 

我怎樣才能做到這一點?

+0

爲什麼不做一個'Percent'類? – 2012-04-28 02:27:50

回答

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 
+0

哈哈我最終這樣做,並回來寫我自己的答案。等待接受你的。謝謝。 – Dru 2012-04-28 02:30:11

+0

謝謝,問題更多的是關於鏈接,但我不知道我可以單獨使用'to_i'做同樣的事情。 – Dru 2012-04-28 23:43:15

+0

我將該方法添加到String類(如您的答案中),但在模型文件('app/models/content.rb')中,在該模型的類定義的「end」語句之後。我認爲這樣做被稱爲「mixin」。 – user664833 2012-09-18 19:21:03

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 
+0

有趣的是,這會比延長課程更有利嗎?我試圖找出一個與Singleton方法有關的額外工作的用例嗎? – Dru 2012-04-28 02:32:43

+1

@Dru Singleton方法在實例上是一次性事物時非常有用。當我需要將對象變形爲API以用於庫函數時,我已經使用過它們,但它們並不經常需要。 – 2012-04-28 02:38:30

+0

@AndrewMarshall謝謝 – Dru 2012-04-28 02:39:40

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"