29 lines
856 B
Markdown
29 lines
856 B
Markdown
|
+++
|
||
|
title = "reflectie"
|
||
|
draft = false
|
||
|
tags = [
|
||
|
"code",
|
||
|
"ruby",
|
||
|
"reflectie"
|
||
|
]
|
||
|
date = "2014-03-11"
|
||
|
+++
|
||
|
# Metaprogrammeren: Ruby Reflectie
|
||
|
|
||
|
### Methods accessen
|
||
|
|
||
|
Dit kan op twee manieren: op een object **instance** of op een **class**, met `.method` of `.static_method`, zie [Ruby Method doc](http://www.ruby-doc.org/core-2.1.1/Method.html).
|
||
|
|
||
|
```ruby
|
||
|
1.method(:+).call 2 # output: 3
|
||
|
Fixnum.static_method(:+).bind(1).call 2 # output: 3
|
||
|
1.method("+").unbind().bind(1).call(2) # output: 3
|
||
|
```
|
||
|
|
||
|
Object Methods zijn al gebind en kan je dus losmaken van hun reference indien gewenst - zelfde effect als de `static_method` call. Je kan blijkbaar zowel een string als een ref meegeven om de naam van de method te resolven.
|
||
|
|
||
|
##### Ik wil meer
|
||
|
|
||
|
`1.methods.each{|x| puts x}`
|
||
|
|
||
|
of `.static_methods` natuurlijk. Enkel public of protected, ook van subklassen.
|