如何使用 define_method 编写带问号的方法
How can I write method with question mark using define_method
我的用户模型有多种类型(管理员、普通、..)。我循环定义 admin?
或 normal?
等方法,如下所示:
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
定义这种方法非常简单。传递以问号结尾的符号或字符串就足够了。
define_method(:admin?) do
# code
end
你要的是这个:
define_method("#{roleVal}?") { ... }
你可以按照下面的方式做。
class User
TYPES = %w(admin normal)
User::TYPES.each do |roleVal|
define_method("#{roleVal}?") do self.role == roleVal end
end
end
希望对您有所帮助。
符号中的结束问号没有什么特别之处:
class User
TYPES = %i(admin? normal?)
User::TYPES.each do |roleVal|
define_method(roleVal) { self.role == roleVal.to_s[0...-1] }
end
end
我的用户模型有多种类型(管理员、普通、..)。我循环定义 admin?
或 normal?
等方法,如下所示:
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
定义这种方法非常简单。传递以问号结尾的符号或字符串就足够了。
define_method(:admin?) do
# code
end
你要的是这个:
define_method("#{roleVal}?") { ... }
你可以按照下面的方式做。
class User
TYPES = %w(admin normal)
User::TYPES.each do |roleVal|
define_method("#{roleVal}?") do self.role == roleVal end
end
end
希望对您有所帮助。
符号中的结束问号没有什么特别之处:
class User
TYPES = %i(admin? normal?)
User::TYPES.each do |roleVal|
define_method(roleVal) { self.role == roleVal.to_s[0...-1] }
end
end