私はこの機能を理解しようとしています。self.class_eval << DEF ... DEF
属性と型はopal
()メソッドに渡されます。
そしてtype_name
は限りtype
がSymbol
又はString
あるようtype
からその値をとります。それ以外の場合は、name
メソッドがtype
で呼び出されます。私はname
メソッドがtype
引数のクラスを得るためにclass
メソッドに似ていると想像します。
self.class_eval
の後に私は迷っていますが、これはおそらくself
で参照されるクラスに追加されるコードブロックを定義していると思います。
どのように動作しますかわかりません。
self.class_eval << DEF
の後に何が起こっているのかを誰かが説明できるかどうか分かりますか。 <<DEF
とDEF
間
def opal(attr, type)
self.ds "#{attr}_id"
type_name = (type.is_a?(Symbol) || type.is_a?(String)) ? type : type.name
self.class_eval <<DEF
def #{attr}
if defined?(@#{attr})
@#{attr}
else
@#{attr} = if self.#{attr}_id
#{type_name}.get(self.#{attr}_id)
else
nil
end
end
end
def #{attr}=(value)
self.#{attr}_id = value.key
@#{attr} = value
end
DEF
end
なぜこれが投票されたのですか?それはプログラミングに関連しており、質問は不明瞭ではないようです。 –