Skip to content

Instantly share code, notes, and snippets.

@k2works
k2works / pry20141220-4675-1pk5yhj.rb
Created December 20, 2014 01:57
特異メソッド
# coding: utf-8
class Foo
end
foo = Foo.new
bar = Foo.new
# barだけにメソッドを定義する
def bar.singleton_method
puts 'Called!'
@k2works
k2works / pry20141222-3087-taayj4.rb
Created December 22, 2014 00:52
特異クラス
class OriginalClass
end
obj = OriginalClass.new
def obj.new_singleton_method
:new_singleton_method
end
obj.class.method_defined? :new_singleton_method # => false
@k2works
k2works / pry20141222-3087-2v17sa.rb
Created December 22, 2014 01:03
特異クラスとObject#extend
module ExtendedModule
def extend_method
:extend_method
end
end
obj = Object.new
obj.extend ExtendedModule
obj.extend_method # => :extend_method
@k2works
k2works / 7-8.rb
Created December 22, 2014 06:03
メソッドをevalで定義する
class LoggingInstanceVariable
logging_instance_val_names = %w(first_val second_val third_val)
logging_instance_val_names.each do |val_name|
eval <<-END_OF_DEF
attr_reader :#{val_name}, :before_#{val_name}
def #{val_name}=(val)
@before_#{val_name} = @#{val_name}
@#{val_name} = val
@k2works
k2works / 7-9.rb
Created December 22, 2014 06:09
evalで動的にメソッドを定義
class AttrClass
def initialize
@attr = "attr"
end
def add_reader(instance_val_name)
eval <<-END_OF_DEF
def #{instance_val_name}
@#{instance_val_name}
end
@k2works
k2works / 7-10.rb
Created December 22, 2014 06:17
evalにBindingオブジェクトを使った場合
class EvalTarget
def initialize
@instance_val = 'instance valiable'
end
def instance_binding
local_val = 'local valiable' # !> assigned but unused variable - local_val
binding
end
@k2works
k2works / pry20141222-14177-mwwrbe.rb
Created December 22, 2014 07:30
クロージャとしてのProcオブジェクトの動作
# coding: utf-8
def create_proc
str = 'from create_proc'
Proc.new { str }
end
proc_obj = create_proc
str = 'from toplevel'
# proc_obj内で呼び出されるstrの参照はcreate_proc内のstrになっている
@k2works
k2works / 11-11.rb
Created December 24, 2014 02:36
ヘッダ行を考慮してCSVを読み込む
# coding: utf-8
require 'csv'
data = <<EOS
name,age,gender
alice,14,female
bob,32,male
carol,17,female
EOS
@k2works
k2works / 11-12.rb
Created December 24, 2014 02:44
CSV読み込み時にコンバータを使用する
require 'csv'
converter = ->(field,field_info) {
if field_info.index == 1
field.upcase rescue field
else
field
end
}
@k2works
k2works / 11-13.rb
Created December 24, 2014 02:50
ヘッダ付きCSVデータを生成する
require 'csv'
headers = %w(name age gender)
people = [
['alice',14,'female'],
['bob',32,'unknown'],
['carol',17,'female']
]
csv_string = CSV.generate('', write_headers: true, headers: headers) { |csv|