首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby语法错误意外的tLABEL

Ruby语法错误意外的tLABEL
EN

Stack Overflow用户
提问于 2018-01-09 22:31:57
回答 1查看 1.2K关注 0票数 3

我有下面的使用redis作为rails缓存配置,非常适合rails文档:

代码语言:javascript
复制
Rails.application.configure do
  ...
  config.cache_store = :redis_cache_store, url: "redis://example.com:6379/0"
  ...
end

使用rails 5.2.0.beta 2和ruby2.3.1p112,我的IDE告诉我关于config.cache_store =行的如下内容:

  • 未使用文字被忽略
  • 语法错误,意外的tLABEL

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

代码语言:javascript
复制
config.cache_store = :redis_cache_store, { url: "redis://example.com:6379/0" }

文档是错误的,还是红宝石版本的问题(例如,文档可能假定ruby >= 2.4)?

无论如何,我不明白作业到底在做什么--怎么能把两件事分配给一件?

EN

回答 1

Stack Overflow用户

发布于 2018-01-09 23:26:48

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

代码语言:javascript
复制
:redis_cache_store.to_s.classify.constantize
# => RedisCacheStore

这大概是一门课。您可以通过查看医生们并看到您也可以传递一个类来推断Rails是这样做的。

RedisCacheStore是在ActiveSupport::Cache命名空间中定义的,该名称空间继承自cache.rb中定义的ActiveSupport::Cache::Store。此存储类仅使用options = nil的单个参数进行初始化。

代码语言:javascript
复制
def initialize(options = nil)
  @options = options ? options.dup : {}
end

这表明了传递散列的要求。由于某种原因,它不使用options = {}初始化,这将使您的初始代码正确。因此,传递像第二个示例中那样的散列解决了错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48177606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档