instance_eval
文字列の値を補間したい。引数alias_name
は、nilまたは文字列になることがあります。構文エラー、予期しない|| in instance_eval string
def create_document(klass, alias_name)
klass.instance_eval <<-EOS
def alias_name
#{alias_name} || name
end
EOS
end
しかし、これは実際に私の構文エラーを与えている:
Uncaught exception: (eval):2: syntax error, unexpected ||
|| name
^
私はこのコードをよく見ている、それがnilであると、私は以下に示すように、文字列を返す別のメソッドを呼び出します構文エラーは表示されません。 #{alias_name}
がnilまたはstringを返す場合、これが原因でエラーになるのはなぜですか?
は、すべてこの後、すべての作品:alias_name
がnilのとき
> nil || 'something else'
=> "something else"
> 'something' || 'something else'
=> "something"
が、それはまったく評価されません。それはinstance_eval文字列にはまったく存在しないので、構文エラーが発生します。しかし、たとえこれは動作しません:あなたはそれを参照してください
Uncaught exception: (eval):2: syntax error, unexpected '.'
if .present?
^
:
alias_name = alias_name || ""
klass.instance_eval <<-EOS
def alias_name
if #{alias_name}.present?
#{alias_name}
else
demodulized_name
end
end
EOS
それは、このエラーを与えるだろうか?その場合はalias_name
のように存在しません。
それは '潜在的にトリッキーな、非常に危険なツールをeval'行い、このような問題です。可能であれば、 'define_method'システムや' send(alias_name) 'のようなもので試してみてください。 – tadman