Ruby,DI在另一个类循环中
当我试图在代码中注入依赖项时遇到了一些障碍,目标是将对象传递给函数,注入依赖项。我用procs尝试过,但是没有任何意义,因为procRuby,DI在另一个类循环中,ruby,loops,oop,dependency-injection,Ruby,Loops,Oop,Dependency Injection,当我试图在代码中注入依赖项时遇到了一些障碍,目标是将对象传递给函数,注入依赖项。我用procs尝试过,但是没有任何意义,因为procparser=proc.new{parser.new}调用了一个新对象,但是在初始化后传递的参数中,我没有尝试lambdas,并且觉得自己完全找不到不违反Ruby风格的方法。请帮帮我 代码如下: class Interface attr_reader :data, :parser def initialize(data = [1, 2, 3], parse
parser=proc.new{parser.new}
调用了一个新对象,但是在初始化后传递的参数中,我没有尝试lambdas,并且觉得自己完全找不到不违反Ruby风格的方法。请帮帮我
代码如下:
class Interface
attr_reader :data, :parser
def initialize(data = [1, 2, 3], parser = Parser.new)
@data = data
@parser = parser
end
def parse_fresh_reports
data.each do |datum|
parser.new(datum).run
end
end
end
class Parser
attr_accessor :datum
def initialize(datum)
@datum = datum
end
def parse_report
puts "from #{self.inspect} #{datum}"
end
end
Interface.new.parse_fresh_reports
我想要这样的东西
class Interface
attr_accessor :data, :parser
def initialize(data = [1, 2, 3], parser = Parser)
@data = data
@parser = parser
end
def parse_fresh_reports
data.each do |datum|
parser.run(datum)
end
end
end
class Parser
attr_accessor :datum
def self.run(datum)
set_params(datum)
parse_report
end
def set_params(datum)
@datum = datum
end
def parse_report
puts "from #{self.inspect} #{datum}"
end
end
Interface.new.parse_fresh_reports
我不知道是否可以将const作为参数传递。
parser=parser.new
不起作用,因为parser.new
需要参数
您可以传入一个常量,它将传入该常量的内容。在本例中,是解析器类。这是一个好主意。但是如何编写解析器类将类方法(如self.run
)与实例方法(如set_params
)混合在一起。为了使它工作,您必须使所有内容都成为类方法
class Parser
# Everything inside the following block affects the class Parser.
# Not instances of Parser.
class << self
attr_accessor :datum
def run(datum)
set_params(datum)
parse_report
end
def set_params(datum)
@datum = datum
end
def parse_report
puts "from #{self.inspect} #{datum}"
end
end
end
这允许传入其他解析器
class MyParser < Parser
def run(*)
super
puts "Me, too!"
end
end
Interface.new([1, 2, 3], MyParser.new).parse_fresh_reports
classmyparser
class MyParser < Parser
def run(*)
super
puts "Me, too!"
end
end
Interface.new([1, 2, 3], MyParser.new).parse_fresh_reports