這裏的隨機操作模塊,像你描述它。 something_random
是主要方法:
module RandomStringManipulation
def something_random
methods = RandomStringManipulation.instance_methods
methods -= [:something_random]
send methods.sample # Ruby >= 1.9 required. See below for Ruby 1.8.
end
def foo
self + "foo"
end
def bar
self + "bar"
end
end
混合成String
:
class String
include RandomStringManipulation
end
現在,我們可以創建一個空字符串,然後做一些胡亂它幾次,打印出來的每個時間:
s = ""
4.times do
s = s.something_random
p s
end
# => "foo"
# => "foobar"
# => "foobarbar"
# => "foobarbarfoo"
有兩點很有意思。第一是這樣的:
methods -= [:something_random]
即從陣列methods
去除:something_random
,防止* something_random *方法從呼叫本身。第二個有趣的位是這樣的:
send methods.sample
Array.sample
(紅寶石> = 1.9)選擇一個隨機方法。然後send
調度該方法。在Ruby 1.8中,請改爲:
send methods[rand(methods.size)]
感謝魯尼,這是非常有用的。你的答案對我來說非常有用,但我必須接受其中的一個,而馬克的更容易理解,但是你讓我學到了一些新東西。謝謝 –
剛剛意識到,其他代碼沒有工作,我結束了不得不使用你的,所以我改變了接受的答案 –
@ 0al0,我很高興它爲你工作。馬克裏德的答案中有一部分比我剛纔寫的更好:他警告你要警惕猴子補丁字符串。這是很好的建議。那裏有陷阱:想象一些寶石還有猴子修補字符串。當你的猴子補丁與別人衝突時,你會希望你從未出生。這可能是一個真正的痛苦。 –