[解決済み] Methodsの中にMethodsを持つことは可能ですか?
質問
メソッドの中にメソッドがあります。内部のメソッドは実行されている変数ループに依存しています。それは悪い考えですか?
どのように解決するのですか?
UPDATE: この回答は最近興味を持たれているようなので、私が指摘したいことは に対する Ruby issue tracker での議論です。 を削除する ここで議論されている機能、すなわち を禁止する メソッド定義がメソッドボディの中にあること .
いいえ、Rubyにはネストされたメソッドはありません。
このようなことはできます。
class Test1
def meth1
def meth2
puts "Yay"
end
meth2
end
end
Test1.new.meth1
しかし、それは ではない であり、ネストされたメソッドではありません。繰り返しますが、Ruby の には はネストされたメソッドを持ちません。
これは何かというと、動的なメソッド定義です。あなたが
meth1
を実行すると、本文の
meth1
が実行されます。このボディでは、たまたま
meth2
を実行した後に
meth1
を一度実行した後に
meth2
.
しかし、どこに
meth2
はどこで定義されているのでしょうか?まあ、それは明らかに
ではなく
があるので、ネストしたメソッドとして定義されていないことは明らかです。
は存在しないので
は存在しないからです。のインスタンスメソッドとして定義されています。
Test1
:
Test1.new.meth2
# Yay
また、明らかに実行するたびに再定義されます。
meth1
:
Test1.new.meth1
# Yay
Test1.new.meth1
# test1.rb:3: warning: method redefined; discarding old meth2
# test1.rb:3: warning: previous definition of meth2 was here
# Yay
要するに、NO, Ruby はそうではありません。 はネストされたメソッドをサポートしていません。
Rubyでは、メソッド本体はクロージャにできず、ブロック本体だけがクロージャにできることにも注意してください。これは、ネストされたメソッドの主要な使用例をほぼ排除しています。 もし Ruby がネストされたメソッドをサポートしていたとしても、ネストされたメソッドで外側のメソッドの変数を使用することはできないからです。
UPDATE CONTINUED: にて。 後 この構文は、Ruby にネストされたメソッドを追加するために再利用されるかも知れません。そして、場合によっては、そのメソッドのレキシカルスコープにアクセスできるかもしれない。しかし、私が上でリンクした議論を読めば、matz がネストされたメソッドに激しく反対していることがわかります (しかし、ネストされたメソッド定義を削除することには賛成です)。
関連
-
[解決済み] Rubyのcontinueに相当します。
-
[解決済み] C#でメソッドをパラメータとして渡す
-
[解決済み] Rubyで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] 実行時にメソッドが定義されている場所を見つけるには?
-
[解決済み】rakeタスクにコマンドライン引数を渡す方法
-
[解決済み】既存のオブジェクトインスタンスにメソッドを追加する
-
[解決済み】Rubyのメソッドで感嘆符が使われるのはなぜ?
-
[解決済み】別のメソッドで定義された内部クラス内の非終端変数を参照することはできません。
-
[解決済み】C++のenumクラスはメソッドを持つことができますか?
-
[解決済み] Rubyで本当に安いコマンドラインオプションのパース
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在の日時をDD/MM/YYYY HH:MM形式で取得するにはどうすればよいですか?
-
[解決済み] Hash each ループでインデックスにアクセスすることは可能ですか?
-
[解決済み] rubyのinjectはreduceと同じ意味ですか?
-
[解決済み] doブロックと中括弧{}の使い分け
-
[解決済み] Rubyで文字列が正規表現にマッチするかどうかをチェックする最も速い方法?
-
[解決済み] 変数名を使ったRubyの正規表現
-
[解決済み] Rubyで既存のハッシュに追加する方法
-
[解決済み] インスタンス変数の値をその名前で取得する
-
[解決済み] RubyでDateTime.nowをUTCに変換するには?
-
[解決済み] 配列に要素がない場合、その要素を追加します。