首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby 1.9.2 class_eval变量

Ruby 1.9.2 class_eval变量
EN

Stack Overflow用户
提问于 2011-11-09 22:25:18
回答 2查看 980关注 0票数 0

在允许数组作为源代码的Settingslogic fork中,在Ruby1.8.7中一切正常,但在Ruby1.9.2中有一个错误。问题出在代码的这一部分:

代码语言:javascript
复制
self.class.class_eval <<-EndEval
  def #{key}
    return @#{key} if @#{key}
    raise MissingSetting, "Missing setting '#{key}' in #{@section}" unless has_key? '#{key}'
    value = fetch('#{key}')
    @#{key} = value.is_a?(Hash) ? self.class.new(value, "'#{key}' section in #{@section}") : value
  end
EndEval

@section == ["path_to_yml_file1", "path_to_yml_file2",...]

看起来#{}以某种奇怪的方式计算,"#{@section}“似乎是一个数组,而不是一个字符串。有人能解释这个吗?

错误跟踪:

代码语言:javascript
复制
@section == ["User/project/config/defaults.yml", "/Users/project/config/development.yml"]


ruby-1.9.2-p290 :001 > Settings.keys
SyntaxError: (eval):3: syntax error, unexpected tSTRING_BEG, expecting keyword_end
...project/config/defaults.yml", "/Users/project...
...                               ^
(eval):3: syntax error, unexpected tSTRING_BEG, expecting keyword_end
...project/config/development.yml"]" unless has_key? 'front'
...                               ^
(eval):5: syntax error, unexpected tSTRING_BEG, expecting ')'
...project/config/defaults.yml", "/Users/project...
...                               ^
(eval):5: syntax error, unexpected tSTRING_BEG, expecting keyword_end
...project/config/development.yml"]") : value
...                               ^
(eval):5: syntax error, unexpected ')', expecting keyword_end
...project/config/development.yml"]") : value
...                               ^

from .../settingslogic-3b5d7d9cc319/lib/settingslogic.rb:198:in `class_eval'

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-10 00:37:29

您已经从main settingslogic创建了一个分支。当时它不支持数组作为源代码,但现在它支持了。尝试使用主settingslogic存储库。

您的错误现在与此字符串相关:

代码语言:javascript
复制
raise MissingSetting,
  "Missing setting '#{key}' in #{@section}" unless has_key? '#{key}'

因为如果使用数组而不是字符串

代码语言:javascript
复制
./settings.yml

你会得到类似这样的结果:

代码语言:javascript
复制
[\"./settings.yml\"]

下面的@#{key}赋值也是如此。在主存储库中,此代码被替换为字符串连接。

票数 1
EN

Stack Overflow用户

发布于 2011-11-09 23:18:08

尝试self.class_eval或甚至没有self,不需要获取类名和self自动分配给当前对象,即您的类。

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

https://stackoverflow.com/questions/8066424

复制
相关文章

相似问题

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