2014-03-30 59 views
-2

如何在導軌中調用散列上的自定義幫助器方法? 下面是我的挑戰的一個簡單例子。方法(散列)有效,散列方法不成功

下面的方法工作,當我打電話last_key(my_hash)

def last_key(hash) 
    hash.keys.last 
    end 

當我打電話my_hash.first_key

def self.first_key 
    self.keys.first 
    end 

未定義的方法first_key哈希此方法將失敗是我使用這個和其他一些代碼排列所得到的迴應。

爲什麼不能正常工作以及我需要的方法語法是什麼my_hash.first_key函數是否正確?

+0

class Hash; def first_key; keys.first; 結束; end –

+0

不需要使用first_key和keys方法中的任何一個。 –

回答

1

從方法定義中刪除self.,否則它成爲類方法。

def first_key 
    self.keys.first 
    end 
4

這是一個類的方法(self.something),但你需要一個對象的方法:

class Hash 

    def first_key 
    self.keys.first 
    end 

end 

a = {'s' => 1, 'b'=> 2} 
a.first_key # => "s" 
+0

重要的是要記住,在類中的方法定義的上下文中的「self」是指類而不是像實例方法中的理論實例那樣。 – tadman

+0

class Hash; def first_key; keys.first; 結束; 結束 –

+0

不需要使用first_key或keys的方法名稱。 –

0

您需要擴展,以實現新的實例方法some_method散列類。
這是可以做到如下:

class Hash 

    def some_method 
    # your code here 
    end 

end 

而你也可以使用。 a_hash.some_method