Это невозможно сделать так, как ты это написал, AFAIK. Тело proc имеет собственную область видимости, и переменные, созданные в этой области, не видны за ее пределами.
Идиоматический подход заключается в создании объекта конфигурации и передаче его в блок, который описывает работу, выполняемую с использованием методов или атрибутов этого объекта. Затем эти настройки читаются при выполнении работы. Это подход, принятый create_table
в миграциях ActiveRecord, например.
Так что вы можете сделать что-то вроде этого:
module Encoder
class Theora
Config = Struct.new(:infile, :outfile, :passes)
def self.encode(&proc)
config = Config.new
proc.call(config)
# use the config settings here
fp = File.open(config.infile) # for example
# ...
end
end
end
# then use the method like this:
Encoder::Theora.encode do |config|
config.infile = "path/to/infile"
config.outfile = "path/to/outfile"
config.passes = 2
# ...
end