加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在Ruby中,有什么方法可以过滤包含“time”一词的对象的所有方法

发布时间:2020-12-17 01:53:00 所属栏目:百科 来源:网络整理
导读:我尝试了以下内容,部分工作: s.methods.map {|n| n if n =~ /time/}= [nil,nil,"skip_time_zone_conversion_for_attributes",nil,"timestamped_migrations",nil,"time_zone_aware_attributes","default_timezone","record_timestamps",nil] s.methods.each
我尝试了以下内容,部分工作:

>> s.methods.map {|n| n if n =~ /time/}
=> [nil,nil,"skip_time_zone_conversion_for_attri
butes",ni
l,"timestamped_migrations",n
il,"time_zone_aware
_attributes","default_timezone","recor
d_timestamps",nil]

>> s.methods.each {|n| p n if n =~ /time/}
"skip_time_zone_conversion_for_attributes"
"timestamped_migrations"
"time_zone_aware_attributes"
"default_timezone"
"record_timestamps"
=> ["extended_by","before_create","vote_ids=","save_without_dirty","_delete","touch","daemonize","after_destroy","skip_time_zone_conversion_for_attribut
es","methods","send","to_query","becomes","after_validation","store_full_s
ti_class?","save_with_transactions!","autosave_associated_records_for_votes","require_library_or_gem","enum_for","taint","instance_variable_defined?","ac
     [...] and the rest of the whole array

>> s.methods.filter {|n| n =~ /time/}
NoMethodError: undefined method `filter' for #<Array:0x4de6b00>
        from (irb):93

解决方法

grep是实现此目的的另一种简单方法:

1.9.0 > require 'date'
 => true 
1.9.0 > x = Date.new
 => #<Date: -1/2,2299161> 
1.9.0 > x.methods.grep /time/
 => ["ctime","asctime","strftime"]

使用您尝试的方法:

map将给定块应用于给定枚举的每个元素,返回一个新的可枚举.这不是你想要的(正如你所看到的).

方法也是一种工作,但显然只是打印出结果并不是非常有用.它根本不像Ruby,但你可以做到:

matching_methods = []
s.methods.each {|m| matching_methods << m if m =~ /time/}

将匹配/时间/匹配的每个方法累积到matching_methods数组中.当然,如果你这样做,那么

s.methods.select { |m| m =~ /time/ }

是优选的.

最后,Ruby中不存在过滤器;这就是select(或find_all)的用途.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读