metaprogramming ruby

49
Metaprogramming Ruby 101502551 資資 3B 資資資

Upload: jiang-yan-ting

Post on 18-Jan-2017

165 views

Category:

Software


1 download

TRANSCRIPT

Page 1: Metaprogramming ruby

Metaprogramming Ruby 101502551 資工 3B 蔣彥亭

Page 2: Metaprogramming ruby

Monkey Patch

Page 3: Metaprogramming ruby

Open Classes

Page 4: Metaprogramming ruby

Class, Module, Object

Page 5: Metaprogramming ruby

Class

Page 6: Metaprogramming ruby

Class, Superclass

Page 7: Metaprogramming ruby

Class Wrap-Up

Page 8: Metaprogramming ruby

Methods Call"one step to the right, then up."

Page 9: Metaprogramming ruby

How about module?

Page 10: Metaprogramming ruby

Method Execution

• Receiver

Page 11: Metaprogramming ruby

Self

Page 12: Metaprogramming ruby

Private in Ruby

Page 13: Metaprogramming ruby

Methods

Page 14: Metaprogramming ruby

A Duplication Problem

Page 15: Metaprogramming ruby

Solutions

1. Dynamic Methods2. Ghost Methods

Page 16: Metaprogramming ruby

Call Methods Dynamically

Page 17: Metaprogramming ruby

Define Methods Dynamically

Page 18: Metaprogramming ruby

Then...Refactor

Page 19: Metaprogramming ruby

method_missing()

Page 20: Metaprogramming ruby

Overriding method_missing()

Page 21: Metaprogramming ruby

Then... Refactor

Page 22: Metaprogramming ruby

Closures

Page 23: Metaprogramming ruby

Scope Gates

• When does the scope change?

1. Class definitions

2. Module definitions

3. Methods

Page 24: Metaprogramming ruby

Scope Gates (cont.)

Page 25: Metaprogramming ruby

Flattening the Scope

Page 26: Metaprogramming ruby

Flattening the Scope (Sol)

Page 27: Metaprogramming ruby

Flattening the Scope (Sol2)

Page 28: Metaprogramming ruby

instance_eval()

Page 29: Metaprogramming ruby

Clean Rooms

Page 30: Metaprogramming ruby

Class Definitions

Page 31: Metaprogramming ruby

Current Object & Current Class

• Current Object• self

• Current Class

Page 32: Metaprogramming ruby

class_eval()

Page 33: Metaprogramming ruby

Class Instance Variables

Page 34: Metaprogramming ruby

Class Variables

Page 35: Metaprogramming ruby

Singleton Methods

Page 36: Metaprogramming ruby

Class Methods, The Truth

Page 37: Metaprogramming ruby

Class Macros

Page 38: Metaprogramming ruby

Where is the Singleton Method?

Page 39: Metaprogramming ruby

Eigenclasses

Page 40: Metaprogramming ruby

Eigenclasses and instance_eval()

Page 41: Metaprogramming ruby

Eigenclasses and Inheritance

Page 42: Metaprogramming ruby

Eigenclasses Wrap-Up

Page 43: Metaprogramming ruby

Quiz: Module Trouble

Page 44: Metaprogramming ruby

Quiz Solution

Page 45: Metaprogramming ruby

Object#extend

Object#extend() is simply a shortcut that includes a module in the receiver’s eigenclass.

Page 46: Metaprogramming ruby

Method Aliases

Page 47: Metaprogramming ruby

Around Aliases

Page 48: Metaprogramming ruby

That's all. Have fun with Ruby Meta!

Page 49: Metaprogramming ruby

Reference

• Metaprogramming Ruby: Program Like the Ruby

Pros ( ISBN-13: 978-1934356470 )