koeだめ 過去アーカイブ[〜2013-12-14]

最新情報は https://www.pixiv.net/fanbox/creator/3780274 にて

『Metaprogramming in Ruby』の和訳 - First Week(仕掛)

内部DSLをかけるようになりたいがために、Metaprogramming in Rubyをやってみようとしています。
まず何を書いているのかを把握するために、和訳をはじめました。

First Step on Ruby Metaprogramming
First Week
Let's start learning Ruby Metaprogramming!

Please refer our accompanying study notes and examples.

Rubyメタプログラミングの最初の一歩
第一週
Rubyメタプログラミングの勉強を始めよう。

こちらの例やノートを参照してください。

Study 0
1st, review the built-in, read-only variable self. Read the following articles:

Study 0
はじめに、ビルトインの読み取り専用変数 selfを復習しましょう。以下の記事を読んでください。

self - The current/default object
self - Quote from Programming Ruby 1.9

self - カレント/デフォルトのオブジェクト
self - Programming Ruby 1.9からの引用


When does self change? - Quote from The Ruby Object Model

いつ selfは変更される? - Ruby Object Modelからの引用

2nd, review singleton class. Read the following article:

次に、singletonクラスを復習しましょう。以下の記事を読んでください。

Understanding Ruby Singleton Classes

RubyのSingletonクラスを理解する

3rd, review the scope of variables. Read the following article:

そして、変数のスコープについて復習しましょう。以下の記事を読んでください。

Ruby Variable Scope

Rubyの変数スコープ

Study 1
To learn about the following methods read The Book of Ruby, Chapter 20: Dynamic Programming.

Study 1
以下のメソッドについて、The Book of Rubyのチャプター30 : 動的プログラミングを呼んで勉強しましょう。

eval
instance_eval
class_eval (aka: module_eval)
class_variable_set
class_variable_get
class_variables (Try it out: instance_variables)
instance_variable_set (Try it out: instance_variable_get)
define_method
const_set
const_get (Try it out: constants)
Class.new (Try it out: Struct.new)
binding (Try it out: lambda)
send (Try it out: method)
remove_method
undef_method
method_missing

Study2
Read _why's hacking, Seeing Metaclasses Clearly to learn about the following singleton class (metaclass)

Study2
Singletonクラス(メタクラス)について知るために、ホワイのハック、Seeing Metaclasses Clearlyを読みましょう。

class << self; self; end

Study 3
Read Marc-Andre Cournoyer's blog, Extending your include knowledge of Ruby to learn about the following methods.
Also read Ruby-Doc Core API: Module#included and Module#extended

include
extend
included
extended


Before Exercises
Watch the following presentation, the Scotland on Rails conference 2009, by Dave Thomas.

The Ruby Object Model



Exercises
Try to do the following exercises. Let's discuss all these exercises in the relevant thread in the First Week Forum.

Exercise 1: Get the values from outside the class.
Exercise 2: Add your code to display 'I like metaprogramming!'
Exercise 3: Show lots of ways to define singleton method.
Exercise 4: Glance into Ruby inside with binding method.
Exercise 5: Define the class without class and def.


Watch the video
Watch the Dave Thomas's presentation about Metaprogramming.

MetaProgramming - Extending Ruby for Fun and Profit

Understand these concepts:

Classes are open
Definitions are active
All method calls have a receiver
Classes are objects


Cheat Sheet
Cheat Sheet: a list of Ruby metaprogramming techniques