Submit Search
Upload
Ruby enumerable source code reading
•
Download as PPTX, PDF
•
5 likes
•
1,547 views
do_aki
Follow
20120811 るりま読書会 Enumerable編
Read less
Read more
Report
Share
Report
Share
1 of 27
Download now
Recommended
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
schoowebcampus
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
メタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
Map
Map
kikairoya
X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
uskey512
元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた
Kumano Ryo
Recommended
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
Kenji Otsuka
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
ノンプログラマーでも明日から使えるJavaScript簡単プログラム 先生:柳井 政和
schoowebcampus
お前は PHP の歴史的な理由の数を覚えているのか
お前は PHP の歴史的な理由の数を覚えているのか
Kousuke Ebihara
メタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
並行プログラミングと継続モナド
並行プログラミングと継続モナド
Kousuke Ruichi
Map
Map
kikairoya
X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
uskey512
元OracleMasterPlatinumがCloudSpanner触ってみた
元OracleMasterPlatinumがCloudSpanner触ってみた
Kumano Ryo
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
do_aki
php-src の歩き方
php-src の歩き方
do_aki
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
PHPとシグナル、その裏側
PHPとシグナル、その裏側
do_aki
再考:列挙型
再考:列挙型
do_aki
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
do_aki
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
do_aki
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
Writing php extensions in golang
Writing php extensions in golang
do_aki
php7's ast
php7's ast
do_aki
N対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer Hint
do_aki
20150212 プレゼンテーションzen
20150212 プレゼンテーションzen
do_aki
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
do_aki
20141017 introduce razor
20141017 introduce razor
do_aki
20141011 mastering mysqlnd
20141011 mastering mysqlnd
do_aki
php in ruby
php in ruby
do_aki
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!
do_aki
N:1 Replication meets MHA
N:1 Replication meets MHA
do_aki
Php radomize
Php radomize
do_aki
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
More Related Content
More from do_aki
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
do_aki
php-src の歩き方
php-src の歩き方
do_aki
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
PHPとシグナル、その裏側
PHPとシグナル、その裏側
do_aki
再考:列挙型
再考:列挙型
do_aki
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
do_aki
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
do_aki
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
Writing php extensions in golang
Writing php extensions in golang
do_aki
php7's ast
php7's ast
do_aki
N対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer Hint
do_aki
20150212 プレゼンテーションzen
20150212 プレゼンテーションzen
do_aki
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
do_aki
20141017 introduce razor
20141017 introduce razor
do_aki
20141011 mastering mysqlnd
20141011 mastering mysqlnd
do_aki
php in ruby
php in ruby
do_aki
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!
do_aki
N:1 Replication meets MHA
N:1 Replication meets MHA
do_aki
Php radomize
Php radomize
do_aki
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
More from do_aki
(20)
Tritonn から Elasticsearch への移行話
Tritonn から Elasticsearch への移行話
php-src の歩き方
php-src の歩き方
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
PHPとシグナル、その裏側
PHPとシグナル、その裏側
再考:列挙型
再考:列挙型
signal の話 或いは Zend Signals とは何か
signal の話 或いは Zend Signals とは何か
PHP AST 徹底解説(補遺)
PHP AST 徹底解説(補遺)
PHP AST 徹底解説
PHP AST 徹底解説
Writing php extensions in golang
Writing php extensions in golang
php7's ast
php7's ast
N対1 レプリケーション + Optimizer Hint
N対1 レプリケーション + Optimizer Hint
20150212 プレゼンテーションzen
20150212 プレゼンテーションzen
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
MySQL Casual Talks 7 「N:1 レプリケーション ~進捗どうですか?~」
20141017 introduce razor
20141017 introduce razor
20141011 mastering mysqlnd
20141011 mastering mysqlnd
php in ruby
php in ruby
PHP から Groonga を使うにはこんなコードになるよ!
PHP から Groonga を使うにはこんなコードになるよ!
N:1 Replication meets MHA
N:1 Replication meets MHA
Php radomize
Php radomize
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
Ruby enumerable source code reading
1.
Ruby enumerable
source code reading 2012/08/11 るりま読書会 Enumerator編 do_aki
2.
@do_aki http://do-aki.net/
3.
PHPer I’m a PHPer
4.
5.
6.
7.
新たにプログラミング言語 を学ぶ時の効果的な方法
8.
Code Reading
9.
Ruby のコード読んでやんよ (`・ω・´)
10.
11.
12.
Ruby 言語仕様 組み込みライブラリ
直下の *.c 標準添付ライブラリ ext/lib 以下
13.
Array
=> array.c Hash => hash.c Enumerable => enum.c Enumerator => enumerator.c
14.
void Init_Array(void)
array.c { rb_cArray = rb_define_class("Array", rb_cObject); rb_include_module(rb_cArray, rb_mEnumerable); rb_define_alloc_func(rb_cArray, ary_alloc); rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1); rb_define_singleton_method(rb_cArray, "try_convert", rb_ary_s_try_convert, 1); rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1); rb_define_method(rb_cArray, "initialize_copy", rb_ary_replace, 1); rb_define_method(rb_cArray, "inspect", rb_ary_inspect, 0); rb_define_alias(rb_cArray, "to_s", "inspect"); rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0); rb_define_method(rb_cArray, "to_ary", rb_ary_to_ary_m, 0); rb_define_method(rb_cArray, "frozen?", rb_ary_frozen_p, 0); 以下 rb_define_method が続く
15.
array.c
=> VALUE rb_cArray; hash.c => VALUE rb_cHash; enum.c => VALUE rb_mEnumerable; enumerator.c => VALUE rb_cEnumerator; VALUE rb_eStopIteration;
16.
Enumerable を継承してるクラス
17.
void Init_Array(void)
array.c { rb_cArray = rb_define_class("Array", rb_cObject); rb_include_module(rb_cArray, rb_mEnumerable); rb_define_alloc_func(rb_cArray, ary_alloc); rb_define_singleton_method(rb_cArray, "[]", rb_ary_s_create, -1); rb_define_singleton_method(rb_cArray, "try_convert", rb_ary_s_try_convert, 1); rb_define_method(rb_cArray, "initialize", rb_ary_initialize, -1); rb_define_method(rb_cArray, "initialize_copy", rb_ary_replace, 1); rb_define_method(rb_cArray, "inspect", rb_ary_inspect, 0); rb_define_alias(rb_cArray, "to_s", "inspect"); rb_define_method(rb_cArray, "to_a", rb_ary_to_a, 0); rb_define_method(rb_cArray, "to_ary", rb_ary_to_ary_m, 0); rb_define_method(rb_cArray, "frozen?", rb_ary_frozen_p, 0); 以下 rb_define_method が続く
18.
るりまに載っていない 隠しメソッドがあるのでは!?
19.
んなもんあるわきゃない (´・ω・`)
けど、ちょっとだけキニナルものを発見
20.
Enumerator::Yielder new {|y| ...
} -> Enumerator Enumerator オブジェクトを生成して返しま す。与えられたブロックは Enumerator::Yielder オブジェクトを 引数として実行されます。 生成された Enumerator オブジェクトに対して each を呼ぶと、この生成時に指定されたブ ロックを 実行し、Yielder オブジェクトに対し て << メソッドが呼ばれるたびに、 each に渡 されたブロックが繰り返されます。 new に渡されたブロックが終了した時点で each の繰り返しが終わります。 このときのブ ロックの返り値が each の返り値となります。
21.
Enumerator::Yielder sample enum =
Enumerator.new do |yielder| (1..3).each do |i| yielder << i end end enum.each{|i| p i} # => 1 2 3
22.
Enumerator::Yielder sample enum =
Enumerator.new do |yielder| (1..3).each do |i| yielder.yield i end end enum.each{|i| p i} # => 1 2 3
23.
経緯 ドキュメント無いから書くよ 現在の実装は実験的なもの 明文化すると容易に変え難い Yieldable module という案は? そこまでする必要なくね? じゃぁいっか。
http://ruby.11.n6.nabble.com/ruby-dev-39660-Bug-trunk- Enumerator-new-y-y-lt-lt-1-lt-lt-2-lt-lt-3-td3535850.html
24.
よーわからん てか、そのへんドキュメントに書いとけよ
25.
時間切れ的まとめ的な何か • 処理系読んでみると面白いよ • コード自体は
ruby script っぽい感じ => ruby に慣れた人は読みやすいハズ • より深く ruby を知ることができる
26.
ありがとうございました
27.
Question?
Download now