我的代码是将字符串“text”与另外两个字符串“redact”和“redact2”进行比较,如果匹配则将其替换为“REDACTED”。
use strict;
use warnings 'all';
use WWW::Mechanize;
use HTML::Entities 'decode_entities';
use constant URL => 'http://texreg.sos.state.tx.us/public/readtac$ext.ViewTAC?tac_view=5&ti=16&pt=1&ch=1&sch=A&rl=Y';
my $mech = WWW::Mechanize->new;
$mech->get(URL);
my $sect = decode_entities('§');
my $rule = $mech->find_all_links(name_regex => qr/^$sect[\d.]+$/);
printf "%d matches\n", scalar @$rule;
我试图通过在puts "Enter your sentense"
text = gets.downcase.chomp
puts "Enter your 2 words to be reducted"
redact = gets.downcase.chomp
redact2 = gets.downcase.chomp
words = text.split(" ")
words.each do |w|
if w == redact
print "REDACTED "
elsif
w == redact2
print "REDACTED "
else
print w + " "
end
end
语句中使用逻辑OR来简化我的代码,但代码会为所有单词打印if
。有人可以解释一下为什么吗?
"RETUCTED"
答案 0 :(得分:2)
有人可以解释一下为什么吗?
因为==
绑定比||
更强。
因此,您的陈述实际上解释如下:
if (w == redact) || redact2
不像你期望的那样:
if w == (redact || redact2)
要解决这个问题,你几乎没有选择:
if w == redact || w == redact2
if [reduct, reduct2].include?(w)
如果您热衷于保存更多行,可以将代码简化为:
words.each do |w|
print [redact,redact2].include?(w) ? "REDACTED " : w + " "
end
答案 1 :(得分:1)
或尝试对两个布尔值进行操作。
你给它w=="redact"
这是一个布尔值,"redact2
是一个字符串(计算结果为真)。
您实际想要做的是if w == redact || w == redact2
。