2012-04-24 4 views
1

В моей папке Lib я billede.rb:Как позвонить или активировать класс?

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

Как позвонить/активировать класс? Единственный способ изменить его на задачу Rake?

+0

Есть ли какие-либо сомнения в отношении моего вопроса? –

+1

Да, есть сомнения. Я лично не знаю, что вы имеете в виду. Что вы хотите сделать? Почему весь этот код внутри класса? – Phrogz

+0

seconded @Phrogz – Josh

ответ

2

Код «внутри класса» запускается точно так же, как и любой другой код. Если у вас есть Ruby-файл, как это:

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

и запустить файл (либо через ruby foo.rb в командной строке или require "./foo" или load "foo.rb" в скрипте) его, то вы увидите результат:

Привет из главного
Здравствуйте от Foo

Если вы хотите загрузить утилиту, которая «делает что-то», что вы можете вызывать из РЕПЛ как IRB или R Консоль беспокоит, то сделайте следующее:

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 из командной строки, он будет.

+0

Спасибо, просто ответ, который я искал. Думайте, что это лучшее решение, чем создание рейк-задачи. Если вы просто проверите код. –

5

Вы не можете напрямую вызвать класс. Вы должны вызвать метод в этом классе. Например:

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

Тогда вы можете вызвать его с помощью Billede.foobar

Может быть, вы должны прочитать документацию по основам синтаксиса рубина, прежде чем пытаться сделать более сложные вещи (например, манипулируя образами ж/RMagick).

+1

+1 для правильного ответа; однако вы должны показать, как определить такой метод.Обратите внимание, что просто погружение с целенаправленной задачей многими считается гораздо более эффективным способом изучения языка, чем попытка «изучить» язык посредством документации или учебников. Некоторые основы хороши, но так же экспериментируют и просят помощи. – Phrogz

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") 
Смежные вопросы