を使用して疑問符を持つメソッドを書くことができます。そして、私は次のようadmin?
またはnormal?
のようなメソッドを定義するためにループを作る:は、どのように私は多くの種類(管理者、通常、..)を持つユーザモデルを持っているdefine_method
class User
TYPES = %w(admin normal)
User::TYPES.each do |roleVal|
define_method(roleVal.to_sym) { self.role == roleVal }
end
end
上記のコードは、たとえばUser.first.admin
のために働いている、しかし、私はUser.first.admin?
としてそれを呼び出す必要があります。
疑問符付きdefine_methodの構文は何ですか? define_method
を使用してもそれができない場合は、メタプログラミングで疑問符を含むメソッドを作成するにはどうすればよいですか?
はええ、それは、少し不明だ[ 'define_method'](HTTPのためのマニュアルに従って理由://ルビー-docの.org/core-2.2.0/Module.html#method-i-define_method)では、引数としてシンボルを使用します。 –
真。しかし、シンボルは '? 'で終わることもあります。 –
@Зелёныйはい、厳密に必要でないところでは、ドキュメントでシンボルを使用することがあります。 'define_method'のCコードを見ると、名前に' rb_to_id'が呼び出され、文字列、フィックスナム、シンボルがMRIの 'ID'型に変換されます。最後に 'ID2SYM(id)'が呼び出され、 'ID'値をRubyシンボル(' define_methodod'の戻り値)に変換します。 –