【发布时间】:2013-01-15 18:07:19
【问题描述】:
我正在使用Ruby 1.9.3。我在玩一些模式,发现了一些有趣的东西:
示例 1:
irb(main):001:0> /hay/ =~ 'haystack'
=> 0
irb(main):003:0> /st/ =~ 'haystack'
=> 3
示例 2:
irb(main):002:0> /hay/.match('haystack')
=> #<MatchData "hay">
irb(main):004:0> /st/.match('haystack')
=> #<MatchData "st">
=~ 返回其第一个匹配项的第一个位置,而 match 返回模式。除此之外,=~和match()有什么区别吗?
执行时间差 (根据@Casper)
irb(main):005:0> quickbm(10000000) { "foobar" =~ /foo/ }
Rehearsal ------------------------------------
8.530000 0.000000 8.530000 ( 8.528367)
--------------------------- total: 8.530000sec
user system total real
8.450000 0.000000 8.450000 ( 8.451939)
=> nil
irb(main):006:0> quickbm(10000000) { "foobar".match(/foo/) }
Rehearsal ------------------------------------
15.360000 0.000000 15.360000 ( 15.363360)
-------------------------- total: 15.360000sec
user system total real
15.240000 0.010000 15.250000 ( 15.250471)
=> nil
【问题讨论】:
-
为什么不给我一票?
-
operator和method可能在做同样的事情,但它们的功能差异太大 - 两个帖子都包含太多信息,这真的很棒而且很有帮助的知识信息适用于所有 SO 用户。尽管有所有这些,但我的投票对我来说真的很糟糕!我没想到论坛上会出现这种情况。 -
我没有对你投反对票,但我想这是因为所写的问题有点荒谬。您发现有不止一种方法可以执行类似的操作,但每种方法都返回不同的结果。为什么这很有趣? Ruby(以及大多数编程语言)中有许多方法可以做类似的事情但返回不同的结果。
-
@Phrogz 如果 OP 期望他们做同样的事情会很有趣(例如,
String#==和String#eql?)。通过更多的研究当然可以找到答案,但这是一个公平的初学者问题。 -
问题不是它是否有趣(这是主观的),而是方法之间的差异。
标签: ruby regex ruby-1.9.3