сравняване при case и ===
-
ето следното парче код
puts response == Net::NTTPNotFound puts response === Net::NTTPNotFound case response when Net::HTTPNotFound then puts "404" else puts "!= 404" end
Та следното вади 2 false + 404 (т.е хем е нот фаунд, хем не е както и по разумен начин да го проверявам). ЗАЩО??
Публикувано преди повече от 4 години -
Може би не си погледнал добре. При мен:
[~]$ irb >> require 'net/http' => false >> r = Net::HTTPNotFound => Net::HTTPNotFound >> r == r => true >> r === r => false >> case r >> when r then ?> puts 'match' >> else ?> puts 'mismatch' >> end mismatch => nil >>
Публикувано преди повече от 4 години -
P.S. paste-ни го от конзолата, защото няма Net::"N"TTPNotFound
Публикувано преди повече от 4 години -
case x when y <=> y === x, не x === y
===
не е релация на еквивалентност, а по-скоро операция принадлежност към when клаузата…Примерно
(1..10) === 1 # => true 1 === (1..10) # => false
Публикувано преди повече от 4 години -
дам … проблема се оказа, че не съм ги подредил правилно при сравнението…
И все пак – ТОВА Е ИЗВРАТЕНО??Публикувано преди повече от 4 години -
Догми…
Публикувано преди повече от 4 години -
Аз съм догматичен? Е да бяхте намекнали че може нещо, което прилича на оператор, отъждествяващ релация на еквивалентност да не е комутативен …
Бтв разбрах че има значение кой компилатор ползваме:
Аз съм със Ruby 1.8.6 / Irb 0.9.5Публикувано преди повече от 4 години -
нем…
/tmp$ irb1.9 irb(main):001:0> (1..10)===1 => true irb(main):002:0> 1===(1..10) => false /tmp$ irb1.8 >> (1..10)===1 => true >> 1===(1..10) => false
P.S. промпт-а е различен, т.к. съм го модвал на 1.8
Публикувано преди повече от 4 години -
В Ruby няма компилатори…
Иначе, разликата в 1.9 е в
Proc#===
и (май)Symbol#===
Публикувано преди повече от 4 години
Нов отговор
Трябва да сте вътре за да отговаряте.