2013-08-29 92 views
-3

我是Ruby的新手,我剛剛學習哈希參數。 我只是有樣,如果我使用哈希參數如何返回值問題有沒有更好的方法來在Ruby中用散列參數返回值?

我創建一個名爲Test類的方法,包括所謂的test_method與哈希參數,像下面的代碼:

class Test 
    def test_method(names={}) 
     names[:firstname] 
     names[:lastname] 
     return names 
    end 
    end 

我叫它像

test = Test.new 
    myname = test.test_method(firstname: 'Tester', lastname: 'Testing') 

    puts myname 

當然,我得到的結果是「姓名測試姓氏測試」

所以,我用其他 辦法。 我設置兩個實例變量@firstName和@LastName的名稱[:名字]名稱[:名字],如下所示:

def test_method(names={}) 
     @firstname = names[:firstname] 
     @lastname = names[:lastname] 
     return @firstname, @lastname 
end 

我能夠得到的結果我想,但如果我有10個以上論據需要設置? 如果有更好的方法來獲得結果?

+0

相反,你寫的東西,' test_method'不是一個類方法。 – sawa

+0

啊,是的。謝謝。它只是一個方法 – user2727616

+0

@ user2727616'放置myname'打印'{:firstname =>「Tester」,:lastname =>「Testing」}'在我的系統上,而不僅僅是'firstname Tester lastname Testing'。你想要的輸出是什麼?什麼'test_method'應該返回?一個數組,一個字符串? – Stefan

回答

0

是的。如果你所有的散列鍵對應的實例變量的名字,你可以簡單地遍歷您的鍵值對,並使用instance_variable_set

def test_method(names = {}) 
    names.each do |key, value| 
    instance_variable_set("@#{key}", value) 
    end 
end 
+0

謝謝。我試圖使用「instance_variable_set」。它更加靈活。 – user2727616

+0

該方法可能成爲調試噩夢的來源。 – Stefan

1

嘗試了這一點

def test_method(names = {}) 
    names.values # no need to write even return, in ruby last statement of method, is automatically returnd 
end 
+0

非常感謝。我也讀過Ruby doc:哈希部分,但我不知道我不需要在test_method中指定符號。它會返回鍵或值,如果我只是使用names.keys或names.values – user2727616

相關問題