self
@ 80 ruby
• :
• SNS: @yalab
• :
• : ( )
• ruby : since 1.6
• : ruby trunk mjit merge
1 name = "Yoshida" #
2 name.size #
1 name = "Yoshida" #
2 name.size #
1 name = "Yoshida" #
2 name.size #
1 public_methods
• )
• )
1 self.public_methods
"self"
Y^Y^Y^Y^Y^Y
self
1 p self #=> main
2
3 class A
4 p self #=> A
5 def method
6 p self #=> #<A:0x007fdf1002cf28>
7 end
8
9 def self.classmethod
10 p self #=> A
11 end
12 end
13
14 A.module_eval do
15 p self #=> A
16 end
1 class Animal
2 def type
3 :animal
4 end
5 end
6
7 class Human < Animal
8 def initialize(name)
9 @name = name
10 end
11
12 def name
13 "#{@name}(#{type})" #<- type
14 end
15 end
1 class User < ApplicationRecord
2 validates :name, presence: true
3 end
1 class User < ApplicationRecord
2 self.validates(:name, {presence: true})
3 end
1 class User < ApplicationRecord
2 validates :name, presence: true
3 end
)private
self
self
1 p self.class #=>
2 p self.class.ancestors #=>
3 p self.instance_variables #=>
4 p self.methods #=>
5 p self.methods.grep /write/ #=>
6 p self.method(:tap).source_location #=>
Object,Class,Module
https://docs.ruby-lang.org/ja/2.5.0/class/Object.html
https://docs.ruby-lang.org/ja/2.5.0/class/Class.html
https://docs.ruby-lang.org/ja/2.5.0/class/Module.html
self ruby
self
self
Selfを考える

Selfを考える