[過去ログ] Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
401(7): デフォルトの名無しさん [sage] 2016/06/22(水) 06:25:24.35 ID:jdKVcriH(1/5) AAS
module A
def a
p 'A'
end
end
module B
def b; a; end
def a
p 'B'
end
end
class X
include B
include A
end
p X.ancestors #=> [X, A, B, Object...]
p X.new.b
"A"
"A"
なぜ、2回もAが表示されたの? Bが表示されない
モジュールB内で、aを呼んだときは、静的スコープのB.a を読んでくれないな。
常に動的に、X, A, B の順に、aを探すのか
「メタプログラミング Ruby」1.6章より
402(2): 401 [sage] 2016/06/22(水) 06:34:16.68 ID:jdKVcriH(2/5) AAS
B.a を呼んだときは、メソッド探索順に影響されず、
静的スコープのB.a を呼ぶ方法はないの?
動的言語だから、無理なのか?
409: 401 [] 2016/06/22(水) 20:22:56.84 ID:jdKVcriH(3/5) AAS
>>401
自己レス
>p X.new.b
ここにも、p を付けていたから、2回表示された
>>407407(2): デフォルトの名無しさん [sage] 2016/06/22(水) 17:17:51.11 ID:7oRMeHhG(1) AAS
foo bar, baz do 0 end
foo bar, baz { 0 }
これって動作違うのな、テスト書いてたらエラー出てびっくりしたわ
意味わからん。カッコで囲んで
417(2): 401 [sage] 2016/06/22(水) 22:45:04.32 ID:jdKVcriH(4/5) AAS
module B
def b; a; end
def a
p 'B'
end
end
静的言語では、bを呼んだら、同じモジュール内の、aを呼ぶのが自然。
モジュールBのbを呼んで、次にaを呼ぶ際、異なるモジュールのaを呼ぶとは普通、思わないだろw
モジュールBを書いている奴は、当然同じモジュール内の、b・aを想定している
これぐらい静的スコープから、解決してほしい
419: デフォルトの名無しさん [sage] 2016/06/22(水) 22:54:00.17 ID:jdKVcriH(5/5) AAS
>>414-416
proc, lambda, block(&) は、コード・処理を持ち運んで、後で、call で実行できる。
blockは、yield で、callback してもらえる
以下は、即時実行っていうこと?
proc{〜}.call
lambda{〜}.call
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s