Ruby 1.9.2 class_eval переменные - PullRequest
       22

Ruby 1.9.2 class_eval переменные

0 голосов
/ 09 ноября 2011

В Настройки логического форка , допускающего использование массива в качестве источника, в 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'

Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 09 ноября 2011

Вы сделали вилку из основного settingslogic.В то время он не поддерживал массив как источник, но теперь он поддерживает.Попробуйте использовать основной settingslogic репозиторий.

Ваша ошибка теперь связана с этой строкой:

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

, поскольку в случае использования массива вместо строки

./settings.yml

вы получите что-то вроде этого:

[\"./settings.yml\"]

То же самое происходит с назначением @#{key} ниже.В основном хранилище этот код заменен на конкатенацию строк.

0 голосов
/ 09 ноября 2011

Попробуйте self.class_eval или даже без себя, нет необходимости получать имя класса и автоматически присваивать себе текущий объект, т. Е. Ваш класс.

...