сравняване при case и ===

  1. ето следното парче код

    puts response == Net::NTTPNotFound
    puts response === Net::NTTPNotFound
    case response
    when Net::HTTPNotFound then puts "404"
    else
    	puts "!= 404"
    end

    Та следното вади 2 false + 404 (т.е хем е нот фаунд, хем не е както и по разумен начин да го проверявам). ЗАЩО??

    Публикувано преди повече от 4 години
  2. Може би не си погледнал добре. При мен:

    [~]$ 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 години
  3. P.S. paste-ни го от конзолата, защото няма Net::"N"TTPNotFound

    Публикувано преди повече от 4 години
  4. case x when y
    <=>
    y === x, не x === y

    === не е релация на еквивалентност, а по-скоро операция принадлежност към when клаузата…

    Примерно

    (1..10) === 1 # => true
    1 === (1..10) # => false

    Публикувано преди повече от 4 години
  5. дам … проблема се оказа, че не съм ги подредил правилно при сравнението…
    И все пак – ТОВА Е ИЗВРАТЕНО??

    Публикувано преди повече от 4 години
  6. Догми…

    Публикувано преди повече от 4 години
  7. Аз съм догматичен? Е да бяхте намекнали че може нещо, което прилича на оператор, отъждествяващ релация на еквивалентност да не е комутативен …
    Бтв разбрах че има значение кой компилатор ползваме:
    Аз съм със Ruby 1.8.6 / Irb 0.9.5

    Публикувано преди повече от 4 години
  8. нем…

    /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 години
  9. В Ruby няма компилатори

    Иначе, разликата в 1.9 е в Proc#=== и (май) Symbol#===

    Публикувано преди повече от 4 години

Нов отговор

Трябва да сте вътре за да отговаряте.