2012-04-24 54 views
1

在我的lib文件夾我已經billede.rb:如何致電或激活課程?

class Billede 
    require 'RMagick' 
    #some code that creates a watermark for a image 
    image.write(out) 
end 

如何調用/激活類?是將其改爲Rake任務的唯一方法嗎?

+0

對我的問題有什麼疑問? – 2012-04-24 18:35:45

+1

是的,有疑問。我個人不知道你的意思。你想要做什麼?爲什麼'class'中的所有代碼? – Phrogz 2012-04-24 18:36:17

+0

@Phrogz – Josh 2012-04-24 18:36:38

回答

2

代碼'內部類'運行就像任何其他代碼一樣。如果你有一個Ruby的文件是這樣的:

puts "Hello from #{self}" 
class Foo 
    puts "Hello from #{self}" 
end 

,並運行文件(通過ruby foo.rb在命令行上或require "./foo"或在腳本load "foo.rb"),那麼你會看到輸出:

你好從主
你好從富

如果要加載的工具,「做一些事情」,然後就可以從像IRB或R A REPL調用苦惱的控制檯,然後執行以下操作:

module MyStuff 
    def self.do_it 
    # your code here 
    end 
end 

您可以require "./mystuff"加載代碼,當你準備好運行它鍵入MyStuff.do_it

而且,正如你可能已經猜到,你還可以創建方法接受論據。

如果要定義可以包含在其他(沒有直接的副作用),但文件也「不會的事情」每當文件本身運行,你可以這樣做:

module MyStuff 
    def self.run! 
    # Go 
    end 
end 

MyStuff.run! if __FILE__==$0 

現在如果你或load這個文件的run!方法將不會被調用,但如果你從命令行鍵入ruby mystuff.rb它會。

+0

謝謝,只是我正在尋找的答案。認爲這是一個比創建rake任務更好的解決方案。如果你只是要測試一些代碼。 – 2012-04-24 18:51:35

5

你不能直接調用一個類。你必須調用該類的方法。例如:

class Billede 
    def self.foobar 
    # some kind of code here... 
    end 
end 

然後你就可以通過Billede.foobar

稱之爲也許你應該嘗試做更復雜的事情(如操縱圖像W/Rmagick)之前閱讀基本的Ruby語法一些文檔。

+1

+1正確答案;但是,您應該展示如何定義這種方法。請注意,只是潛入一個重點突出的任務被許多人認爲是學習語言的一種更有效的方式,而不是通過文檔或教程來「學習」語言。一些基礎很好,但實驗和尋求幫助也是如此。 – Phrogz 2012-04-24 18:44:13

1
# in /lib/billede.rb 
class Billede 

    def self.do_something(arg) 
    # ... 
    end 

    def do_anotherthing(arg) 
    # ... 
    end 

end 

# inside a model or controller 
require 'billede' 

Billede::do_something("arg") 
# or 
billede_instance = Billede.new 
billede_instance.do_anotherthing("arg")