로그'메타프로그램 루비 버전 2'4장 읽기
제 4 장 수요일: 블록
개시하다
블록의 기본
def a_method(a,b)
a + yield(a,b)
end
a_method(1,2){ |x, y|(x + y) *3 }
#=> 10
def a_method
return yield if block_given
'ブロックがありません'
end
a_method #=> "ブロックがありません
a_method { "ブロックがあるよ!" } #=> "ブロックがあるよ!"
블록 닫기
def my_method
x = "Goodbye"
yield("cruel")
end
x = "Hello"
my_method{ |y| "#{x}, #{y} world" } #=> "Hello, cruel world"
def just_yield
yield
end
top_level_variable = 1
just_yield do
top_level_variable += 1
local_to_block = 1
end
top_level_variable #=> 2
local_to_block #=> Error !
덩어리가 현지의 속박을 감싸서 함께 가져가기 때문에 덩어리는 벽장이다
역할 영역
작용문
v1 = 1
class MyClass #スコープゲート: classの入り口
v2 = 2
local_variables #=> ["v2"]
def my_method # スコープゲート: defの入り口
v3 = 3
local_variables
end # スコープゲート: defの出口
local_variables #=> ["v2"]
end
obj = MyClass.new
obj.my_method #=> [:v3]
local_variables #=> [:v1, :obj]
배열 역할 영역
class의 경우
my_var = "成功"
MyClass = Class.new do
puts "クラス定義の中は#{my_var} !"
def my_method
...
end
end
def의 경우
my_var = "成功"
MyClass = Class.new do
puts "クラス定義の中は #{my_var}!"
define_method :my_method do
"メソッド定義の中も #{my_var}!"
end
end
평형기
공유 역할 영역
def define_methods
shared = 0
Kernel.send :define_method, :counter do
shared
end
Kernel.send :define_method, :inc do |x|
shared += x
end
end
define_methods
counter
inc(4)
counter
컬렉션 요약
작용문
옷장
평형기
Class.new
/moduleModule.new
/defModule.define_method
교체 가능공유 역할 영역
instance_eval
class MyClass
def initialize
@v = 1
end
end
obj = MyClass.new
obj.instance_eval do
self #=> #<MyClass:0x3340dc @v=1>
@v #=> 1
end
호출 가능 대상
프로세스 중입니다.이것은 블록을 대상으로 하는 물체
Lambda에서Proc의 변형
방법 중.
Plco 객체
Proc는 블록을 대상으로 합니다.
Proc.new
inc = Proc.new{ |x| x + 1 }
inc.call(2) #=> 3
dec = lamda{|x| x-1 }
dec.class #=> Proc
dec.call(2) #=> 1
Proc 쌍 lambda
Method 객체
class MyClass
def initialize(value)
@x = value
end
def my_method
@x
end
end
object = MyClass.new(1)
m = object.method :my_method
m.call #=> 1
호출 가능 객체 병합
감상
응, 드디어 정리했어...
조금, 이 장의 이해는 전체 장과 비교하면 비교적 약하다...
네모난 덩어리가 뭔지 궁금하네.익숙하지 않다
TODO: 비워둔 시간 다시 읽기
Reference
이 문제에 관하여(로그'메타프로그램 루비 버전 2'4장 읽기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/baramatsubonzo/items/b9a2b478dab5d08df2be텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)