2013-03-07 479 views
0

我要检查,如果“听8581' 出现在check变量,如果它是,我要添加‘听8581’。grep和不等于在if条件

我有验证码:

if (found = check.grep(/Listen 8581/)).empty? 
    run "#{try_sudo} sed -i '$ a\Listen 8581\n' #{ports_file}" 
    puts "OOOps".red 
end 
+0

'grep'在一个可枚举的对象上工作,就像一个Array,有点像'select'。我们无法判断代码中的“check”是一个标量/字符串,而您正试图在Ruby中编写Perl代码,或者实际上使用“grep”。 – 2013-03-07 15:17:52

回答

2
unless /Listen 8581/.match check 
    # run your code here 
end 
+0

是的... tats工作..感谢很多... – Linda 2013-03-07 13:16:59

+0

我会写'检查[/听8581 /]''的测试。 – 2013-03-07 15:26:04

1

作为一个文体的事情,内部条件赋值给一个变量是一个坏主意,因为它是一个容易打开的bug和维护问题在调试大程序很容易错过逻辑或丢失==。配第一然后检查清晰度:

 
found = check.grep(/Listen 8581/) 
if found.empty? 
    run "#{try_sudo} sed -i '$ a\Listen 8581\n' #{ports_file}" 
    puts "OOOps".red 
end 

我知道这是很有诱惑力,以避免在堆栈中加入一个变量,但如果你的代码被嵌入的方法中,额外的变量就会掉出来的范围,这将是一个无关紧要。

在某些语言(如Perl和C)中,这种写法习惯于这种方式,但这是我在职业生涯中多次遇到问题的原因,也是我避免的结果。

+0

好的,我用了一个vraible nw。但仍然使用megas编码,非常感谢。 – Linda 2013-03-08 08:25:23

+0

这很好。使用'check [/ Listen 8581 /]'将我的推荐更改添加到他的代码中,您将可以编写“类似Zen的”代码,这正是我们在Ruby中所要做的。 – 2013-03-08 14:04:22