Ruby制限メソッドのアクセス
2073 ワード
これまでに定義手法はいずれもインスタンス手法として任意に呼び出すことができる.しかし、時にはそう望んでいないかもしれません.例えば、いくつかの処理方法は、一般に外部に開示使用されない.
Rubyは3つのメソッドのアクセスレベルを提供し、必要に応じて柔軟に調整することができます. public---この方法 が例示的な方法として外部に開示. private---受信者を指定する場合、このメソッドを呼び出すことはできません(デフォルトの受信者でのみ呼び出すため、インスタンスの外部からアクセスできません) . protected---同じクラスでこのメソッドをインスタンスメソッドとして呼び出すことができる.
メソッドのアクセスレベルを変更すると、この3つのキーワードにメソッド名を表す記号を指定します.
AccTestという二つの方法はpub方法が正常に呼び出すことができる.ただし、privメソッド呼び出し時にエラーが発生しました(private method`priv'called for#<0 x 007 fbde 88358 f 8>(NoMethodError))
複数のメソッドのアクセスレベルを統一的に定義する場合は、次の構文を使用します.
アクセス・レベルが指定されていないメソッドのデフォルトは
protectedと定義メソッドは、同じクラス(およびそのサブクラス)でインスタンスメソッドとして使用できるが、それ以外の場所では使用できない.
Rubyは3つのメソッドのアクセスレベルを提供し、必要に応じて柔軟に調整することができます.
メソッドのアクセスレベルを変更すると、この3つのキーワードにメソッド名を表す記号を指定します.
class AccTest
def pub
puts "pub is public method."
end
public :pub # pub public( public, )
def priv
puts "priv is private method."
end
private :priv # priv private.
end
AccTest.new.pub
AccTest.new.priv #
AccTestという二つの方法はpub方法が正常に呼び出すことができる.ただし、privメソッド呼び出し時にエラーが発生しました(private method`priv'called for#<0 x 007 fbde 88358 f 8>(NoMethodError))
複数のメソッドのアクセスレベルを統一的に定義する場合は、次の構文を使用します.
class AccTest
public # ,
#
def pub
puts "pub is public method."
end
private # private
def priv
puts "priv is private method."
end
end
アクセス・レベルが指定されていないメソッドのデフォルトは
public
ですが、initialize
メソッドは例外で、privateとして定義されます.protectedと定義メソッドは、同じクラス(およびそのサブクラス)でインスタンスメソッドとして使用できるが、それ以外の場所では使用できない.
class Point
attr_accessor :x, :y
protected :x=, :y= # setter , .
def initialize(x:, y:)
@x, @y = x, y
end
def swap() # x, y
self.x, self.y = self.y, self.x # x=, y=
#
return self
end
end
point = Point.new(x: 10, y: 20)
puts "x = #{point.x} y = #{point.y}" #=> x = 10 y = 20
point.swap
puts "x = #{point.x} y = #{point.y}" #=> x = 20 y = 10
point.x = 222 #=> (protected method `x=' called for #<0x007fe6420257f8> (NoMethodError))