about_constants.rb from Koans
Ruby
code posted
created at 21 Sep 23:56
Edit
|
Back
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
require File.expand_path(File.dirname(__FILE__) + '/edgecase') C = "top level" class AboutConstants < EdgeCase::Koan C = "nested" def test_nested_constants_may_also_be_referenced_with_relative_paths assert_equal "nested", C end def test_top_level_constants_are_referenced_by_double_colons assert_equal "top level", ::C end def test_nested_constants_are_referenced_by_their_complete_path assert_equal "nested", AboutConstants::C assert_equal "nested", ::AboutConstants::C end # ------------------------------------------------------------------ class Animal LEGS = 4 def legs_in_animal LEGS end class NestedAnimal def legs_in_nested_animal LEGS end end end def test_nested_classes_inherit_constants_from_enclosing_classes assert_equal 4 Animal::NestedAnimal.new.legs_in_nested_animal end # ------------------------------------------------------------------ class Reptile < Animal def legs_in_reptile LEGS end end def test_subclasses_inherit_constants_from_parent_classes assert_equal __, Reptile.new.legs_in_reptile end # ------------------------------------------------------------------ class MyAnimals LEGS = 2 class Bird < Animal def legs_in_bird LEGS end end end def test_who_wins_with_both_nested_and_inherited_constants assert_equal __, MyAnimals::Bird.new.legs_in_bird end # QUESTION: Which has precedence: The constant in the lexical scope, # or the constant from the inheritance heirarachy? # ------------------------------------------------------------------ class MyAnimals::Oyster < Animal def legs_in_oyster LEGS end end def test_who_wins_with_explicit_scoping_on_class_definition assert_equal __, MyAnimals::Oyster.new.legs_in_oyster end # QUESTION: Now Which has precedence: The constant in the lexical # scope, or the constant from the inheritance heirarachy? Why is it # different than the previous answer? end |
2.09 KB in 3 ms with coderay