2011-08-01 56 views
0

我有以下文件夾的方法:幫助解決類和方法,以減少代碼

/lib/app_name/my_file.rb /lib/app_name/other_file.rb

在我的代碼,事情像這樣目前:

APP_NAME::OTHER_FILE.some_method?(APP_NAME::MY_FILE::A::B) 

有沒有辦法,我可以在我的代碼包括這一次,所以我不必像這樣引用它?

特別我想訪問方法'some_method'和類MY_FILE中的枚舉。

+0

你需要的文件是正確的?你想要什麼就像'速記'爲了不每次都做'APP_NAME :: BLA'? –

+0

不,我不需要它們,因爲我使用rails約定引用它們,所以它會禁止文件所在的文件夾。 – Blankman

+0

好的,答案也適用於你? –

回答

0

在ruby中,一切都是對象,即使是

所以,你可以指定類(或模塊)的變量,以創建一個本地的簡寫,是這樣的:

other = APP_NAME::OTHER_FILE 
mine = APP_NAME::MY_FILE::A::B 

other.some_method? mine 
0

你已經不應該需要通過在任何類/模塊的名稱您目前命名空間,所以例如,您可以刪除這些類名稱中的APP_NAME::部分。

如果您想要進一步縮小類名的大小,您需要從字面上更改類名(假設您命名爲不好),或者按照Pablo的說法進行操作,並將它們別名爲較短的名稱。是的,你可以'要求'他們在一行中得到別名:

創建一個文件,例如,它在gems中完成的方式:lib/app_name.rb(如果是Gem,lib /gem_name.rb)。裏面是:所以現在

class AppName::MyFile 
    ... 
end 

AppName::MF = AppName::MyFile 

你可以require 'app_name'和所有的類將被加載,與他們一起別名:

require 'app_name/my_file' 
require 'app_name/other_file' 

而且裏面other_file.rb和my_file.rb,創建別名。

然後你可以參考AppName::MF而不是AppName::MyFile。注意:順便說一下,您使用的是一些奇怪的命名約定;)APP_NAME :: MY_FILE作爲類名是奇數。類名應該是駱駝式的。