我有一个对象"某人"许多人都认可:id, name, age, service_private...
这些属性可以等于nil
。
我希望service_private
取名为service
。 (我知道列表中只有一个service_*
!)
我尝试了一些命令行,例如:
someone = Somebody.new()
someone.starts_with("service") or someone[/^service/] or someone.start_with?("service")
但错误!
谢谢。
答案 0 :(得分:4)
Enumerable#grep
可以在这里提供帮助。
返回枚举中
Pattern === element
的每个元素的数组。如果提供了可选块,则将每个匹配元素传递给它,并将块的结果存储在输出数组中。
someone.methods.grep /^service/
如果您想列出private methods
someone.private_methods.grep /^service/
因为#methods
只为提供了obj的公共和受保护方法的名称列表。
答案 1 :(得分:3)
someone.methods.find { |m| m[/^service/] }
# => :service_private
如果该方法是私有的(顾名思义),则需要使用private_methods
而不是方法:
someone.private_methods.find { |m| m[/^service/] }
# => :service_private
如果您想获取此属性的值,则需要调用它(使用send
)
someone.send(someone.methods.find { |m| m[/^service/] })
# => 'some value'