我有一个服务类,它帮助清理来自JSON有效负载的数据。
attr_reader :data, :method, :args
def self.call(*args)
new(*args).call
end
def initialize(data, sanitization_method, *method_args)
@data = data
@method = sanitization_method
@args = *method_args
end
def call
data.send(method, args)
end问题是,当我调用类方法时,它返回一个枚举数:
PaidGigs::Services::SanitizeData.call("shd234", :gsub, /[^0-9]/, "")
=> #<Enumerator: "shd234":gsub([/[^0-9]/, ""])>而不是评估方法和返回:
=> "234"我在控制台中玩过,这是因为splat数组没有被转换成单独的参数,这与Ruby文档的建议相反。有人对Object#send有过这个问题吗?任何帮助都非常感谢!
发布于 2014-11-03 18:02:04
您应该将args存储为Array,并在最后一刻使用splat:
class SanitizeData
attr_reader :data, :method, :args
def self.call(*args)
new(*args).call
end
def initialize(data, sanitization_method, *method_args)
@data = data
@method = sanitization_method
@args = method_args
end
def call
data.send(method, *args)
end
end
puts SanitizeData.call("shd234", :gsub, /[^0-9]/, "").inspect发布于 2014-11-03 18:10:21
您将args存储为一个数组,因此当您调用该方法时,您需要再次拆分它:
def call
data.send(method, *args)
end这是:
@args = *method_args它对你没有任何帮助,所以它可以是:
@args = method_argshttps://stackoverflow.com/questions/26720069
复制相似问题