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"で囲んでも機能しませんでした

||ルビーでは、これで演算子を使用できないことがわかりました

ここで、ルビーが case/when メソッドを取り、最終的にそれを次のような条件のグループに分解すると仮定します

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

しかし、明らかにそうではありません。何が起きてる?

ありがとう

4

1 に答える 1

2

式は最初に評価されるため、 1when nil || "espg"と同等です。一致することはありません。when "espg"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" ..

またはすべてのいくつかの組み合わせ:)


1ifこれも、この例が疑わしい理由と同じです。おそらく次のように書かれているはずです。

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