我正在学习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语句。我错过了什么吗?谢谢
答案 0 :(得分:5)
将任何条件附加到else
分支的确是零义 - 仅当检查所有其他分支时才执行此分支(if
和elsif
部分中给出的子句失败。
这就是为什么Ruby会按如下方式处理您的代码:
else
consumer_atas.any?{ |o| @filter =~ /\b#{Regexp.escape(o)}\b/ }
@catagory = "consumer_atas"
...即,始终使用@catagory
中指定的值设置else
变量。