Я просто попытался запустить код, который выглядел как этотИспользование рубинового «случая»/«когда» с использованием || или && операторы и т.д.
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 **, но **, так как линия продолжает оценивать, он должен перейти от этого соответствия из-за характера || оператор i.e. (nil || false) => next'. gotcha, а затем он не соответствует «epsg», а его последующему ... (?), что имеет смысл –
@boulder_ruby Если это так написано, тогда да - но это всегда будет правдой выражение (поскольку 'any ||" espg "' является правдивым), поэтому он никогда не должен соответствовать альтернативной ветви. – user2246674
nil не 'ничего'. что-нибудь? У рубина нет объекта для этого !!! кроме 'Object', конечно ... erm ..... –