Metode pribadi di Ruby:
Jika suatu metode bersifat pribadi di Ruby, maka itu tidak dapat dipanggil oleh penerima eksplisit (objek). Itu hanya dapat dipanggil secara implisit. Ini dapat disebut secara implisit oleh kelas di mana ia telah dijelaskan dalam serta oleh subkelas dari kelas ini.
Contoh-contoh berikut akan menggambarkannya dengan lebih baik:
1) Kelas Hewan dengan metode private class_name
class Animal
def intro_animal
class_name
end
private
def class_name
"I am a #{self.class}"
end
end
Pada kasus ini:
n = Animal.new
n.intro_animal #=>I am a Animal
n.class_name #=>error: private method `class_name' called
2) Subkelas Hewan bernama Amfibi:
class Amphibian < Animal
def intro_amphibian
class_name
end
end
Pada kasus ini:
n= Amphibian.new
n.intro_amphibian #=>I am a Amphibian
n.class_name #=>error: private method `class_name' called
Seperti yang Anda lihat, metode pribadi hanya bisa disebut secara implisit. Mereka tidak dapat dipanggil oleh penerima eksplisit. Untuk alasan yang sama, metode pribadi tidak dapat dipanggil di luar hierarki kelas yang menentukan.
Metode yang Dilindungi di Ruby:
Jika suatu metode dilindungi dalam Ruby, maka ia dapat dipanggil secara implisit oleh kelas yang mendefinisikan dan subkelasnya. Selain itu mereka juga dapat dipanggil oleh penerima eksplisit selama penerima adalah diri atau kelas yang sama dengan diri:
1) Kelas Hewan dengan metode yang dilindungi protect_me
class Animal
def animal_call
protect_me
end
protected
def protect_me
p "protect_me called from #{self.class}"
end
end
Pada kasus ini:
n= Animal.new
n.animal_call #=> protect_me called from Animal
n.protect_me #=>error: protected method `protect_me' called
2) Kelas mamalia yang diwarisi dari kelas hewan
class Mammal < Animal
def mammal_call
protect_me
end
end
Pada kasus ini
n= Mammal.new
n.mammal_call #=> protect_me called from Mammal
3) Kelas amfibi yang diwarisi dari kelas Hewan (sama dengan kelas mamalia)
class Amphibian < Animal
def amphi_call
Mammal.new.protect_me #Receiver same as self
self.protect_me #Receiver is self
end
end
Pada kasus ini
n= Amphibian.new
n.amphi_call #=> protect_me called from Mammal
#=> protect_me called from Amphibian
4) Kelas yang disebut Tree
class Tree
def tree_call
Mammal.new.protect_me #Receiver is not same as self
end
end
Pada kasus ini:
n= Tree.new
n.tree_call #=>error: protected method `protect_me' called for #<Mammal:0x13410c0>
Object
diizinkan untuk memanggil metode pribadi dari setiap instance lainnyaObject
, akan mungkin untuk mengatakan hal-hal seperti5.puts("hello world")
.