3

我只是尝试运行一些看起来像这样的代码

def get_proj4(srid, type=nil)
  type.downcase! if type
  case type
  when nil || "epsg"
   open("http://spatialreference.org/ref/epsg/#{srid}/proj4/").read
  when "esri"
   open("http://spatialreference.org/ref/esri/#{srid}/proj4/").read
  end
end

它运行不正常,每次都返回 nil 。用括号括起来nil || "epsg"也不起作用

事实证明,红宝石不允许我||在此使用运算符

现在我假设 ruby​​ 采用 case/when 方法并最终将其分解为一组看起来像

x = type
  if x == (nil || "epsg")
    y = ...runs code...
  elsif x == "esri"
    y = ...
  end
x = nil
y

但显然它没有。这里发生了什么?

谢谢

4

1 回答 1

2

该表达式首先被评估,因此when nil || "espg"等于when "espg"1 - 它永远不会匹配nil

要匹配非此即彼,请用逗号分隔选项:

case type
when nil, "espg" ..
when "esri" ..

或者,或者,也许规范化该值:

case (type || "espg")
when "espg" ..
when "esri" ..

或者使用类似于 if-else 的其他形式:

case
when type.nil? || type == "espg" ..
when type == "esri" ..

或一切的某种组合:)


1这也是该示例if可疑的原因。大概应该这样写:

if type.nil? || type == "espg"
于 2013-09-24T00:33:55.183 回答