2
我只是试图运行一些代码,看起来像这样使用ruby's'case'/'when'方法与||或&&运营商等
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 || "epsg"
没有工作,要么
原来红宝石不会允许我使用||
运营商在这个
现在假设红宝石需要的情况下/时方法,并最终将其分解成一组条件看起来像
x = type
if x == (nil || "epsg")
y = ...runs code...
elsif x == "esri"
y = ...
end
x = nil
y
但显然它没有。这里发生了什么?
由于
ahh'x == nil || “epsg”**确实**匹配零**但**,因为线路继续评估,所以它必须从该匹配中继续,因为||的性质。运算符,即'(nil || false)=> next'。然后它不匹配“epsg”,并且它与下一个......(?)那种有道理 –
@boulder_ruby如果它是这样写的,那么是的 - 但它总是一个真理表达式(作为'anything ||“espg”'是truthy),所以它不应该匹配任何其他分支。 – user2246674
零不是“任何”。什么是什么?红宝石没有对象!除了'对象',当然......呃..... –