ארכיון יומי: 31 יולי, 2012

השוואת טיפוס נתונים ב Ruby עם case

אחד הדברים שמאוד מפתיעים אותי ברובי, הם שלפעמים מה שנראה מאוד ברור שיעבוד, עובד בצורה קצת שונה. לרוב הגיונית יותר, אבל לא כמו שאנחנו מצפים בד"כ.

עם case היה מאוד טבעי לעשות משהו כזה:

a = {'one' => 1 }
puts "a.class = #{a.class}"
case a.class
when Hash
puts 'Hash'
else
puts 'not Hash'
end
view raw case1.rb hosted with ❤ by GitHub

משום מה ההשווה במקרה הזה היא על הערך אבל לא על המחלקה.
הפתרון אבל הוא פשוט לא להשוות בצורה הזו, אלא בצורה הבאה:

a = {'one' => 1 }
puts "a.class = #{a.class}"
case a
when Hash
puts 'Hash'
else
puts 'not Hash'
end
view raw case2.rb hosted with ❤ by GitHub

 

* צריך תמיכה ב Javascript גם ב wordpress וגם ל gist על מנת לצפות בקוד.