Skip to content

Instantly share code, notes, and snippets.

@vovka
Created September 24, 2010 13:09
Show Gist options
  • Save vovka/595328 to your computer and use it in GitHub Desktop.
Save vovka/595328 to your computer and use it in GitHub Desktop.
class A
attr_accessor :b
end
class B
attr_accessor :val
end
a = A.new
b = B.new
b.val = 20
a.b = b
b.val = 25
puts "В Руби \"всё -- объект\". "
puts "-> b.class # => #{b.class}\n-> a.b = b"
if a.b.val == 25
puts "Поле 'b' объекта 'a' является ссылкой на объект 'b' класса '#{a.b.class}'"
else
puts "Поле 'b' объекта 'a' является копией объекта 'b' класса '#{a.b.class}'"
end
c = :q
b.val = c
c = :w
puts "-> c.class # => #{c.class}\n-> b.val = c"
if b.val == :w
puts "Поле 'val' объекта 'b' является ссылкой на объект 'c' класса '#{b.val.class}'"
else
puts "Поле 'val' объекта 'b' является копией объекта 'c' класса '#{b.val.class}'"
end
puts "\n\e[1;33;40mВ чём разница между объектами класса '#{a.b.class}' и класса '#{b.val.class}'?\e[0m\n\n"
Copy link

ghost commented Sep 24, 2010

'abc'.object_id == 'abc'.object_id # => false

:abc.object_id == :abc.object_id # => true

@kronos
Copy link

kronos commented Sep 24, 2010

до b.val = 25
a.b -----> b, b.val ------> 20 # b.val == a.b.val == 20
после b.val = 25
a.b -----> b, b.val ------> 25 # b.val == a.b.val == 25

b.val ----> :q <----- c # b.val == c == :q
после c = :w
b.val ------> :q, c -----> :w # b.val == :q != c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment