簡體   English   中英

Ruby 1.9.2 class_eval變量

[英]Ruby 1.9.2 class_eval variables

在允許數組作為源的Settingslogic分支中 ,在ruby 1.8.7中一切正常,但是在ruby 1.9.2中存在錯誤。 問題在代碼的這一部分內:

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}”似乎是一個數組,而不是字符串。 有人可以解釋嗎?

錯誤跟蹤:

@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'

謝謝你的幫助

您已經從main settingslogic創建了一個fork。 當時它不支持將數組作為源,但是現在支持。 嘗試使用主settingslogic邏輯存儲庫。

您的錯誤現在與此字符串有關:

raise MissingSetting,
  "Missing setting '#{key}' in #{@section}" unless has_key? '#{key}'

因為在使用數組而不是字符串的情況下

./settings.yml

你得到這樣的東西:

[\"./settings.yml\"]

下面的@#{key}分配也會發生同樣的情況。 在主存儲庫中,此代碼已替換為字符串連接。

嘗試self.class_eval或什至沒有self,都不需要獲取類的名稱,並且self會自動分配給當前對象,即您的類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM