0

配列をソースとして許可するSettingslogicフォークでは、ruby 1.8.7ではすべてが機能していますが、ruby1.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'

助けてくれてありがとう

4

2 に答える 2

1

mainからフォークを作成しましたsettingslogic。当時はソースとして配列をサポートしていませんでしたが、現在はサポートしています。メインsettingslogicリポジトリを使用してみてください。

エラーはこの文字列に関連しています:

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

文字列の代わりに配列を使用する場合

./settings.yml

あなたはこのようなものを手に入れます:

[\"./settings.yml\"]

@#{key}以下の割り当てでも同じことが起こります。メインリポジトリでは、このコードは文字列の連結に置き換えられました。

于 2011-11-09T16:37:29.003 に答える
0

self.class_eval自分自身がなくても、クラスの名前を取得して、現在のオブジェクト、つまりクラスに自分自身を自動的に割り当てる必要はありません。

于 2011-11-09T15:18:07.887 に答える