Ruby on rails 在ruby中以常量指定proc是否错误?

Ruby on rails 在ruby中以常量指定proc是否错误?,ruby-on-rails,ruby,Ruby On Rails,Ruby,在常量ruby中定义半静态事物是错误的吗? 在我的例子中,我想进行一些api调用,但要更改有关传入参数的头 HeadersBuilder = Proc.new do |config| { 'X-Auth-CLient' => config.client_id, 'X-Auth-Token' => config.token, 'accept' => 'application/json' 'content-type' =>

在常量ruby中定义半静态事物是错误的吗? 在我的例子中,我想进行一些api调用,但要更改有关传入参数的头

HeadersBuilder = Proc.new do |config|
  {
    'X-Auth-CLient' => config.client_id,
    'X-Auth-Token'  => config.token,
    'accept'        => 'application/json'
    'content-type'  => 'application/json'
  }
end

def self.connection(config)
 # do some faraday stuffs, we actually dont care about

 faraday_conn.headers = HeadersBuilder.call(config)

 # Still dont care about the rest
end

是的,这是错误的。嗯,正如你所发现的,不是技术上的,而是实际上的。与类方法(或单独的对象)相比,使用常量没有任何优势,但也有一些缺点。一个是它根本不是常量(这可能就足够了),但是测试常量和使用它的方法要比使用更灵活的类方法困难得多。你可能会考虑在Rails代码中从不使用常量,因为这些相同的原因。

我会建议你使用单独的对象,只有这个角色是准备准确的标题集。我们称之为

HttpHeadersFactory
。 与proc相比的一个优势是,这个名称首先解释了它的功能(proc没有实现的功能)


其次,如果您有更复杂的逻辑(使用了一些标题,但根据某些条件不使用其他标题),编写标题将更容易。

Ok同意命名。如果我将其重命名为HttpHeadersFactory或HEADERS\u BUILDER,会更加明显。事实上,这应该不会有太大的变化,所以不需要添加额外的逻辑。这里的重点是,它是半静态的。当然,我在类、方法或其他方面也达到了同样的效果,但我只是想知道,除了糟糕的命名之外,为什么这会是错误的。这仍然不是一个好主意。您使用的常量表示常量-字符串、哈希、数字(…),而不是never方法(在您的例子中是Proc)。另外,据我所知,调用proc比调用常规方法慢。proc是常量,对吗?这样做:H={},H=”“或H=->{}仍在将一个对象赋给常数no?而且,感觉这不够复杂,无法拥有自己的类,因为逻辑永远不会改变,但输入会改变。注释中的示例与问题中的示例不同。H=调用(x)不一定与H=调用(y)相同。是否有充分的理由使用常量而不是类方法?