如果,elseif,else行为

时间:2014-03-28 16:21:31

标签: ruby

我正在学习Ruby并且有简单的If,Elsif,Else语句。别的总是运行。我看过几个例子,看不出我做错了什么。

if ip_voice.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
      @catagory = "ip_voice"
elsif ip_pbx.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
      @catagory = "ip_pbx"
elsif ip_video_surveillance.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
      @catagory = "ip_video_surveillance"
elsif ip_video_telephony.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
      @catagory = "ip_video_telephony"
elsif enterprise_gateways.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
      @catagory = "enterprise_gateways"
else consumer_atas.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
      @catagory = "consumer_atas"
        ...run code...
end

我已经按照不同的顺序移动了这些语句,代码总是运行良好,只是总是使用else语句。我错过了什么吗?谢谢

1 个答案:

答案 0 :(得分:5)

将任何条件附加到else分支的确是零义 - 仅当检查所有其他分支时才执行此分支(ifelsif部分中给出的子句失败。

这就是为什么Ruby会按如下方式处理您的代码:

else 
  consumer_atas.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
@catagory = "consumer_atas"

...即,始终使用@catagory中指定的值设置else变量。