Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
irb(main):001:0> class A; end irb(main):002:0> class B < A; end irb(main):003:0> B.ancestors => [B, A, Object, Kernel] irb(main):004:0> module C; end irb(main):005:0> class B; include C; end irb(main):006:0> B.ancestors => [B, C, A, Object, Kernel]
irb(main):001:0> module A irb(main):002:1> def a irb(main):003:2> puts "A.a" irb(main):004:2> end irb(main):005:1> end => nil irb(main):006:0> class B; end => nil irb(main):007:0> class C < B irb(main):008:1> include A irb(main):009:1> end => C irb(main):010:0> d = C.new => #<C:0x81d22f4> irb(main):011:0> d.a A.a => nil irb(main):012:0> module A irb(main):013:1> def a irb(main):014:2> puts "New A.a" irb(main):015:2> end irb(main):016:1> end => nil irb(main):017:0> d.a New A.a
Например, когда вы используете строку в качестве ключа хэша, Руби замораживает ее копию и в дальнейшем использует именно ее. Поэтому даже если строка изменится, на ключ это не повлияет.
>> a = 'one'
=> "one"
>> hash = {a => 1}
=> {"one"=>1}
>> a.frozen?
=> false
class String
def tab n
" "*n+self
end
end
puts "asdf".tab
module StringExtension
def tab(n)
(" " * n) + self
end
end
class String; include StringExtension; endили
String.send(:include, StringExtension)
Покорим Ruby вместе! Капля девятая