2010-06-23 77 views
0

我想消除「=」符號的特定原因。它可能看起來像這樣:替代「=」的紅寶石方法

cat_that_has_name("Kelly").as(:kelly) 
kelly.do_something 

這裏的「as」方法用於生成引用我的貓的方法「kelly」。任何人都可以幫助我嗎?

任何建議,將不勝感激。

更新:

約爾格是正確的,我已經添加了一個簡單的測試來證明我的意圖:

require "test/unit" 

class AsTest < Test::Unit::TestCase 
    def setup 
    @cats = ["Kelly", "Tommy"] 
    end 

    def teardown 
    end 

    def test_as 
    kelly1 = get_cat("Kelly") 
    get_cat("Kelly").as(:kelly2) 
    assert_equal(kelly1.object_id, kelly2.object_id) 
    end 

    private 
    def get_cat(name) 
    @cats.each do |cat| 
     if cat.to_s==name 
     return cat 
     end 
    end 
    return nil 
    end 
end 
+0

你想消除哪個特定'=',在你的例子中看不到一個? – 2010-06-23 17:54:45

+0

如果你的代碼是「之後」,那麼「之前」會是「kelly = cat_that_has_name(」Kelly「); kelly.do_something'? – 2010-06-23 23:22:03

+0

@安德魯,你是對的。 – eric2323223 2010-06-24 02:03:49

回答

3

這是一種很難找出你真正想要的東西。如果你想得到一些明智的答案,你將不得不提供你想要達到的完整代碼示例(例如,你發佈的代碼缺少cat_that_has_nameso_something方法的定義)。您還需要發佈一個完整的規範,說明您期望使用哪種方法,以及使用示例,最好還使用測試套件。畢竟,如果您沒有定義「正確」的含義,我們如何知道我們的答案是否正確?

我可以從你的神祕問題破譯最好是這樣的:

class Object 
    def as(name) 
    s = self 
    Object.send(:define_method, name) { s } 
    Object.send(:private, name) 
    end 
end 

但是沒有辦法知道這是否有效的方式,因爲如果我嘗試運行您的代碼示例中,我得到一個NoMethodError對於cat_that_has_name和另一個NoMethodError對於so_something

還請注意,你的問題是自我矛盾:在你的主題行你問的方法來代替=(即創建變量),但在你的問題你談到創建方法,這將意味着你正在尋找代替def而不是=。如果有測試套件,再次正確回答會容易得多。

+0

你是對的,測試是一種更好的解釋方式。 – eric2323223 2010-06-24 02:39:09

+0

@ eric2323223:嗨,我的代碼實際上通過了測試。我沒有想到。 – 2010-06-24 03:17:03