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

也许你应该在尝试做更复杂的事情之前阅读一些关于基本 ruby​​ 语法的文档(例如使用 Rmagick 操作图像)。

于 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

现在,如果您requireload此文件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 回答