私が学んだのは、オブジェクト上の変数を呼び出すときです。Rubyのインスタンス変数にアクセス修飾子がありますか?
my_object.variable
variable
呼び出されたメソッドは、Javaにおいてvariable
def variable
@variable
end
の値を返す、アクセス修飾子があります。ゲッターメソッドの名前の後にRubyがアクセス修飾子を使用するにはどうすればいいですか?
私が学んだのは、オブジェクト上の変数を呼び出すときです。Rubyのインスタンス変数にアクセス修飾子がありますか?
my_object.variable
variable
呼び出されたメソッドは、Javaにおいてvariable
def variable
@variable
end
の値を返す、アクセス修飾子があります。ゲッターメソッドの名前の後にRubyがアクセス修飾子を使用するにはどうすればいいですか?
まず、質問に答える前に、質問にクリーンアップする用語があります。
1つは、決して変数を「呼び出し」ないということです。 Rubyの表現
my_object.variable
はメソッド呼び出しです。可変コールのようなものはありません。メソッドではなく変数を呼び出します。メソッドがvariable
の場合でも:)
二つ目は、あなたがこの
def variable
@variable
end
直接または
attr_reader :variable
を言うことによってのようなメソッドを定義しなかった場合、あなたはvariable
という名前のメソッドと@variable
という名前の変数を持っています。
今質問に答えてください。
Rubyはアクセス修飾子public
、protected
、およびメソッドだけでprivate
、および変数のないを配置します。変数のアクセス制御は実際には意味がありません。なぜなら、オブジェクトのメソッド内でのみ参照され、接頭辞は使用されないからです。言い換えれば、これは決して書くことができません:
[email protected]
これは単なる構文エラーです。書くことができます
obj.var
ここで、var
はメソッドの名前です。アクセス制御はそのメソッドにのみ適用されます。
同じ名前の変数とメソッドを作成している可能性があります(@
を除く)ということは、実際問題ではありません。メソッドにはアクセスコントロールしかありません。
わかりやすい混乱を解消するのに役立ちます。
Rubyでメソッドを非公開にする方法はいくつかあります。
使用private
それ以降のすべてのメソッドをプライベートにする:
class Foo
def public_method
end
private
def private_method
end
end
それともあなたはそれを定義した後、方法はプライベート作る:
class Foo
def public_method
end
private :public_method # public_method is now private
end
または - メソッドの定義があまりにもシンボルを返すので、 - このも作品:
class Foo
private def method_name
end
end
ありがとうございます。 'my_object.variable'を実行すると、Javaで「変数を呼び出す」と言うことができますか?なぜ私はRubyでできないのか理解しています。 –
あなたが "アクセス"と "はい"を意味するために "コール"を取る場合、それはほとんどの人が理解するでしょう。しかし、一般的に "関数呼び出し"と "メソッド呼び出し"について言えば、変数を記述するときにこの用語を避けるのが最善の方法です。しかし、人々はJavaであなたを理解するでしょうが、私は "アクセス"または "読む"は変数にとってより良いと思います。メソッドを呼び出すが、変数を読み込む。あなたが気づいたように、あなたは本当にRubyでそれを言うことができません。 :) RubyとJavaは実際にはかなり異なっています。 –
技術的に言えば、インスタンス変数はクラスではなくオブジェクト(別名インスタンス)に属します。インスタンス変数は、異なるクラスではなく、異なる*オブジェクト*から見ることができます。 (たとえば、サブクラスまたはスーパークラスのメソッドから見ることができます) –