Ruby 什么是触发器运算符?
我最近听说并阅读过Perl和Ruby中使用正则表达式的触发器,但我无法找到它们的实际工作原理以及常见的用例 有人能用语言不可知论的方式解释这一点吗Ruby 什么是触发器运算符?,ruby,regex,perl,language-agnostic,flip-flop,Ruby,Regex,Perl,Language Agnostic,Flip Flop,我最近听说并阅读过Perl和Ruby中使用正则表达式的触发器,但我无法找到它们的实际工作原理以及常见的用例 有人能用语言不可知论的方式解释这一点吗 现在我了解了它是什么,以及它是如何工作的,我将把问题简单地重新表述为:什么是触发器运算符?Perl中的触发器运算符在左操作数为true时计算为true,并一直计算为true,直到右操作数为true。左操作数和右操作数可以是任何类型的表达式,但最常用于正则表达式 对于正则表达式,它对于查找两个标记之间的所有行非常有用。下面是一个简单的示例,展示了它的工
现在我了解了它是什么,以及它是如何工作的,我将把问题简单地重新表述为:什么是触发器运算符?Perl中的触发器运算符在左操作数为true时计算为true,并一直计算为true,直到右操作数为true。左操作数和右操作数可以是任何类型的表达式,但最常用于正则表达式 对于正则表达式,它对于查找两个标记之间的所有行非常有用。下面是一个简单的示例,展示了它的工作原理:
use Modern::Perl;
while (<DATA>)
{
if (/start/ .. /end/)
{
say "flip flop true: $_";
}
else
{
say "flip flop false: $_";
}
}
__DATA__
foo
bar
start
inside
blah
this is the end
baz
如果不希望第一个和第二个正则表达式匹配同一行,可以使用三点版本:If(/start/../end/)
注意,应注意不要混淆触发器运算符和范围运算符。在列表上下文中,。
有一个完全不同的函数:它返回序列值的列表。e、 g
my @integers = 1 .. 1000; #makes an array of integers from 1 to 1000.
我对Ruby并不熟悉,但建议它也能起到类似的作用。这里是@dan1111演示的直接Ruby翻译(说明Ruby从Perl中窃取了比触发器更多的东西): 更地道的ruby:
DATA.each do |line|
if line =~ /start/ .. line =~ /end/
puts "flip flop true: #{line}"
else
puts "flip flop false: #{line}"
end
end
__END__
foo
bar
start
inside
blah
this is the end
baz
你是说触发器中的regexp吗?是的,这是我真正应该问的:)酷,前几天在查看perl时阅读关于触发器操作符的内容,很高兴知道ruby(我的go to scripting语言)也有它,为什么每个
行都被打印出来,而不是触发器字符串?操作符的作用域是什么?看,它什么时候重置为false?显然,它有一个隐藏的布尔变量。
while DATA.gets
if $_ =~ /start/ .. $_ =~ /end/
puts "flip flop true: #{$_}"
else
puts "flip flop false: #{$_}"
end
end
__END__
foo
bar
start
inside
blah
this is the end
baz
DATA.each do |line|
if line =~ /start/ .. line =~ /end/
puts "flip flop true: #{line}"
else
puts "flip flop false: #{line}"
end
end
__END__
foo
bar
start
inside
blah
this is the end
baz