Ruby语法错误意外tLABEL

时间:2018-01-09 22:31:57

标签: ruby syntax

我有using redis as a rails cache的以下配置,与rails doc:

密切配合
Rails.application.configure do
  ...
  config.cache_store = :redis_cache_store, url: "redis://example.com:6379/0"
  ...
end

使用rails 5.2.0.beta2和ruby 2.3.1p112,我的IDE告诉我关于config.cache_store =行的以下内容:

  • unused literal ignored
  • 语法错误,意外的tLABEL

如果我将散列括在{}中,错误就会消失,即:

config.cache_store = :redis_cache_store, { url: "redis://example.com:6379/0" }

文档是错误的,还是ruby版本的东西(例如,doc可能假设ruby> = 2.4)?

在任何情况下,我都不明白作业实际上在做什么 - 如何将两件事分配给一件作品?

1 个答案:

答案 0 :(得分:0)

当配置块命中cache_store并且给出一个符号时,它假定它是一个缓存存储类并执行以下操作:

:redis_cache_store.to_s.classify.constantize
# => RedisCacheStore

这可能是一个类。您可以通过查看the docs并看到您也可以传递一个类来推断Rails这样做。

RedisCacheStore在ActiveSupport::Cache命名空间内定义,该命名空间继承自ActiveSupport::Cache::Storecache.rb中定义了options = nil。此商店类仅使用def initialize(options = nil) @options = options ? options.dup : {} end

的单个参数进行初始化
options = {}

表示需要传递散列。由于某种原因,它不会使用{{1}}进行初始化,这会使您的初始代码正确无误。因此,像第二个示例中那样传递哈希解决了错误。