2014-04-19 100 views
0

我給你一個功能爲例:如何在rails上聲明函數(不是方法)和ruby?

def debug(var) 
    raise var.inspect 
end 
在PHP

它的簡單,我把

function debug($var) 
{ 
    var_dump($var); 
} 

,我只是必須包括在哪裏定義此功能的文件,它是aviable我所有的代碼何時何地。

我如何在rails應用程序中做同樣的事情?我想要一個函數,而不是類中的方法,我希望能夠在代碼中將它稱爲evrywhere。

+0

你能告訴我們爲什麼你強調「功能,而不是方法......」嗎?他們有什麼不同? – vee

+0

你爲什麼要這樣的事情?即使在現代的PHP應用程序中,這些都是使用的方法,但是來自靜態類,即'App :: debug($ var)'可以在所有範圍內通過自動加載器 –

回答

1

您可以在一個模塊中定義的方法,然後包括你需要的地方訪問方法模塊,如下所示:

module SomeModule 
    def debug(var) 
    raise var.inspect 
    end 
end 

然後在另一個類:

class SomeClass 
    include SomeModule 

    def some_method 
    debug(self) 
    end 
end 
1

這是不好的設計來添加全局函數,順便說一句,他們不會是功能:如果你附加一些東西到全局命名空間,它仍然是一個方法:在Ruby中記住,一切都是一個對象。

將它附加到模塊。

例子:

module Utils 

    def self.debug(var) 
    raise var.inspect 
    end 
end 

而且使用它需要的地方:

Utils.debug(something) 
0

讓我們說,你表現出如在第一個例子中的函數是一個方法開始。

在Ruby中,一切都是一個對象。所以如果你像第一個例子那樣定義一些方法,它仍然屬於某個對象。

irb(main):001:0> self 
=> main 
irb(main):002:0> self.class 
=> Object 

你看,即使你只是叫irb,你執行代碼的上下文是Object類的一個實例。

所以你真正想要的是一種在Rails應用程序範圍內全局可用的方法。你可以通過在你的應用程序中包含一些模塊來實現它(就像在這個問題的其他答案中一樣)

但是,我建議不同的方式。用這種方法創建一個類/模塊,而不是創建一個全局方法。類和模塊可以全局訪問,因此您可以隨處使用它(例如,請參閱五位數的答案)。

0

Ruby中沒有函數,你想要的是不可能的。