在Ruby中重写Regexp类=~运算符?

在Ruby中重写Regexp类=~运算符?,ruby,operator-overloading,match,Ruby,Operator Overloading,Match,准确地说,我正在解决一个Ruby测验。它需要对Regexp类进行Monkey修补并向其添加build()方法,该方法可执行以下操作: lucky = Regexp.build(3, 7) "7" =~ lucky # => true "13" =~ lucky # => false "3" =~ lucky # => true 我差不多在那里,这是我到目前为止得到的 > lucky = Regexp.build(3, 7) > "7" =~ lucky =>

准确地说,我正在解决一个Ruby测验。它需要对Regexp类进行Monkey修补并向其添加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
如您所见,我这里唯一的问题是,我没有返回true或false,而是返回0和nil。 你们能帮我想一想如何重写=~操作符来完成这个任务吗?(如果是这样的话)或者让我知道什么是正确的做法


提前感谢。

有一个Ruby习惯用法,用于将某个东西转换为布尔值,
nil
false
是错误的,对它们求反会产生
true
,反过来又会求反为
false
。任何truthy值首先被转换为
false
,然后变为
true

>> !!0
=> true
>> !!nil
=> false

在没有看到您的代码的情况下,很难给您更多提示,但这似乎是在放一个
在正确的位置将解决您的问题。

老实说,我不认为确切的返回值对测验很重要。他在中使用的语义与或中的
=~
文档不匹配


我想说,只要您返回的值与您的Ruby版本一致,那么您就可以了。一般来说,这意味着根本不重写
=~
,只需正确设置模式-我认为这是练习的重点

到目前为止,您的代码是什么?以下是我的代码:一个类和一个模块。很简单。。。希望你能根据你在那里看到的给我更多的提示。提前谢谢!使用包装器和您提供的代码,我能够解决我的问题,谢谢Michael!嗯,我同意你刚才所说的。我认为重要的部分已经解决了,返回类型应该很简单。另一方面,我希望您喜欢我的代码。:)谢谢Gareth