gpt4 book ai didi

ruby - 使用 ruby​​ 的 'case'/'when' 方法与 ||或 && 运算符等

转载 作者:太空宇宙 更新时间:2023-11-03 16:29:08 26 4
gpt4 key购买 nike

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

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​​ 不允许我在此使用 || 运算符

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

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

但显然不是。这是怎么回事?

谢谢

最佳答案

表达式首先被求值,所以当nil || "espg" 等同于 when "espg"1 - 它永远不会匹配 nil

要匹配 either-or,用逗号分隔选项:

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"

关于ruby - 使用 ruby​​ 的 'case'/'when' 方法与 ||或 && 运算符等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18971042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com