Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 空正则表达式文本的Double not(!!//)为false,这是解析错误吗?_Regex_Ruby - Fatal编程技术网

Regex 空正则表达式文本的Double not(!!//)为false,这是解析错误吗?

Regex 空正则表达式文本的Double not(!!//)为false,这是解析错误吗?,regex,ruby,Regex,Ruby,在Ruby中,只有false和nil是false;其他一切都是真实的。可以使用两个not操作符检查对象的真实性: !!假#假 !!零#假 !![]没错 !!{}没错 !!'' # 真的 !!0#对 但后来我发现空正则表达式literal/是错误的,但作为一个变量,它是真实的!: !!/#假的! 不假 x=// x、 类#正则表达式 !!对 我认为这是解析器的一个怪癖。我怎么能问解析器它在做什么呢?老实说,我不是100%确定,但我的想法是Ruby在运行时正在做下一件事!!x put!

在Ruby中,只有
false
nil
是false;其他一切都是真实的。可以使用两个
not
操作符检查对象的真实性:

!!假#假
!!零#假
!![]没错
!!{}没错
!!''      # 真的
!!0#对
但后来我发现空正则表达式literal
/
是错误的,但作为一个变量,它是真实的!:

!!/#假的!
不假
x=//
x、 类#正则表达式
!!对

我认为这是解析器的一个怪癖。我怎么能问解析器它在做什么呢?

老实说,我不是100%确定,但我的想法是Ruby在运行
时正在做下一件事!!x

put!!/#这是一个幻影。匹配(nil),如下所示,因此返回false
x=//
放!!x、 比赛(零)

这不仅适用于空正则表达式文本,而且适用于所有正则表达式文本

!!/(.*)/
=> false

x = /(.*)/
!!x
=> true
起初,这似乎是regexp构造方式的一个问题

!!Regexp.new('')
=> true
x = Regexp.new('')
!!x
=> true
!!//.freeze
=> true
但深入挖掘,这似乎是原因:

!!//
=> false
$_ = 'b'
!!//
=> true
将“$”设置回零将重置结果。
$的值是从
Kernel.readline
Kernel.get
设置的。在新控制台中:

Kernel.readline
a
"a\n"
!!//
=> true

因此,实例化带有
/
的Regexp对象似乎与
$的值相匹配,这并不能解释
放置的原因!!x
打印
true
以及为什么
put/
不打印
false
//做一个
!!匹配数据,但是
!!x
做了一个
!!Regexp
。这就是我的想法。”因此,用
/
实例化一个Regexp对象似乎与
$的值相匹配,这似乎是正确的,因为在
$之后,
='b'
/b/
也是如此。