知道一个属性的全名,知道开头吗?

时间:2014-06-01 15:54:49

标签: ruby

我有一个对象"某人"许多人都认可: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")

但错误!

谢谢。

2 个答案:

答案 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'