在Ruby中覆盖Regexp class =〜运算符?

时间:2011-10-19 15:22:17

标签: ruby operator-overloading match

我正在解决Ruby测验,确切地说是#4。它需要Monkey Patch Regexp类并向其添加build()方法,它执行以下操作:

lucky = Regexp.build(3, 7)
"7" =~ lucky # => true
"13" =~ lucky # => false
"3" =~ lucky # => true

我几乎就在那里,这就是我到目前为止所得到的......

> lucky = Regexp.build(3, 7)
> "7" =~ lucky  => 0 
> "13" =~ lucky => nil 
> "3" =~ lucky  => 0

正如你所看到的,我唯一的问题是我没有返回真或假,而是0和nil。 你们能帮助我了解如何覆盖=〜运算符来实现这一目标吗? (如果这是要走的路)或让我知道做什么是正确的。

提前致谢。

2 个答案:

答案 0 :(得分:1)

有一个Ruby习惯用于将某些内容转换为布尔值!!nilfalse是假的,否定了它们true,而false则反对false。任何真实价值首先变为true,然后变为>> !!0 => true >> !!nil => false

!!

如果没有看到您的代码,很难给您更多提示,但似乎将{{1}}放在正确的位置可以解决您的问题。

答案 1 :(得分:1)

说实话,我不认为确切的回报值对测验很重要。他在quiz 4中使用的语义与ruby 1.8ruby 1.9=~的文档不符。

我会说,只要你返回一个与你的Ruby版本一致的值,那么你就没事了。一般来说,这意味着根本不会覆盖=~并且只是正确地设置模式 - 我认为这是练习的重点