1

私の lib フォルダーには、billede.rb があります。

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

クラスを呼び出す/アクティブ化するにはどうすればよいですか? Rake タスクに変更する唯一の方法はありますか?

4

3 に答える 3

5

クラスを直接呼び出すことはできません。そのクラスのメソッドを呼び出す必要があります。例えば:

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

次に、経由で呼び出すことができますBillede.foobar

おそらく、より複雑なこと (Rmagick を使用した画像の操作など) を試みる前に、基本的な ruby​​ 構文に関するドキュメントを読む必要があります。

于 2012-04-24T18:40:50.543 に答える
2

「クラス内の」コードは、他のコードと同じように実行されます。このようなRubyファイルがある場合:

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

ファイルを(ruby foo.rbコマンドラインまたはrequire "./foo"スクリプトload "foo.rb"で)実行すると、次の出力が表示されます。

メインから
こんにちはFooからこんにちは

IRBやRailsコンソールなどの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

requireこれで、ユーザーまたはloadこのファイルの場合、run!メソッドは呼び出されませんがruby mystuff.rb、コマンドラインから入力すると呼び出されます。

于 2012-04-24T18:43:06.237 に答える
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")
于 2012-04-24T18:53:39.060 に答える