2013-10-24 38 views
0

我正在嘗試執行一個隨機方法的邏輯。比方說,我有10個方法,我需要隨機選擇其中一個。執行一個隨機方法

主要方法將駐留在我的Rails 3.2應用程序的ActionController中,該應用程序將具有邏輯和內部的10個方法。

+0

什麼是你的問題? – sawa

+0

當你說「我試圖制定一個邏輯」時,它確實有助於從你的一次嘗試中發佈一些代碼,否則它看起來好像你要求別人爲你做你的工作。詢問代碼的問題,但沒有顯示任何努力,都是堆棧溢出的主題。請添加幾行*您的*代碼以保留主題,因爲這是一個有趣的問題,否則會關閉。 –

+0

我會詳細闡述一下這個想法,可能是別人會從中獲得一顆寶石,因爲我太新手了。所以在看到很多驗證碼選項後,我想到了一個想法。但是我正在尋找非常簡單的選項。我在想什麼是如何使用由rails通過securerandom生成的十六進制隨機數並將其用於captacha。在僞代碼應該是這樣, 祕密=通過SecureRandom的 方法(祕密,答案,問題){ question.randomise answer.question 回答,闕,祕密} randomnumber 防爆QUES邏輯:以祕密,並找出左起第三個字母 – user2716736

回答

9

選擇使用sample數組隨機方法,然後用send

# Make a few methods 
def a; 1; end 
def b; 2; end 
def c; 3; end 
def d; 4; end 
def e; 5; end 

# Put their names in an array 
methods = %i[a b c d e] 

# Call a random one 
send methods.sample #=> 4 
send methods.sample #=> 1 
send methods.sample #=> 3 
+0

不錯。請注意,如果A類包含這些方法,並且只包含這些方法,則'A.instance_methods(false)=> [:a,:b,:c,:d,:e]' - 您的數組方法。如果方法列表隨時間變化,這可能會很方便,以免忘記更新「方法」。 –

+0

@CarySwoveland只要不要忘記刪除隨機調用方法,如果它也在A中,以免最終用隨機應用的基本情況遞歸! –

+0

好點。正如我所說的,我假設類A只包含那些方法,但如果它在類A中,我想你可以在循環方法時檢查它,或者更好:methods = A.instance_methods(false) - [: random_caller] –