생산하다
소개
초보 루비스트로서 당연하게 생각하는 많은 것 중 가장 당연하게 여겼던 개념은 코드 블록과 yield
키워드인 것 같습니다. 나는 do
와 end
가 열거형, 조건문 및 형식의 고유한 부분이라고 가정했습니다.
사실, 우리는 우리 자신의 방법에서 이러한 코드 블록을 활용할 수 있고 키워드 yield
로 액세스할 수 있습니다.
수익률이란?
yield
는 기본 제공 Ruby 키워드입니다. 모든 Ruby 키워드 목록을 찾을 수 있습니다here.
yield
가 해석되면 메서드를 직접 계승하는 코드 블록의 실행이 시작됩니다.
def execute_block
yield
end
execute_block { puts "Hello" }
"Hello"
#=> nil
execute_block do
2 + 2
end
#=> 4
위의 예에는 주어진 코드 블록을 단순히 실행하는 메서드가 있습니다. yield
키워드가 히트하면 메서드가 일시 중지되고 블록이 실행됩니다. 블록의 결과가 메서드에 반환되고 실행을 계속할 수 있습니다.
이제 블록 & yield
의 기본 아이디어를 보았으므로 멋진 구현을 살펴보겠습니다.
성능 시험
사용자 지정yield
메서드의 일반적인 용도는 메서드 또는 코드 블록을 성능 테스트할 때입니다.
def speedtest
t1 = Time.now
result = yield
t2 = Time.now
puts t2 - t1
result
end
이 방법은 블록 실행 전후에 타임 스탬프가 필요합니다. 런타임을 찾은 다음 코드 블록의 결과를 반환하는 데 그 시간의 차이가 필요합니다.
speedtest { 1 + 1 }
1.0e-06
=> 2
speedtest { [1, 1].reduce(:+) }
3.0e-06
=> 2
맞춤형 조건부 흐름
우리만의 조건부 흐름을 만들어 봅시다:
def allow_if_true(method, false_message)
return false_message unless yield
method
end
이 방법을 사용하여 method
의 실행을 제한하여 주어진 블록이 true
를 반환하는 경우에만 실행되도록 합니다.
allow_if_true(top_secret_internet_stuff, "Access Denied") do
session[:username] == "Bill Gates"
end
이제 우리는 인터넷의 모든 깊고 어두운 비밀을 안전하게 지킬 수 있습니다. 해커들을 잡아라!
열거하는 것은 어떻습니까?
재미있는 사실: 매개변수를 yield
! 각자 유사한 열거자를 만들어 사용하는 방법을 살펴보겠습니다.
def do_stuff_to(arr)
return "not an array!" unless arr.class == Array
count = 0
while count < arr.length
yield arr[count]
count += 1
end
arr
end
이 간단한 구현으로 우리는
def execute_block
yield
end
execute_block { puts "Hello" }
"Hello"
#=> nil
execute_block do
2 + 2
end
#=> 4
def speedtest
t1 = Time.now
result = yield
t2 = Time.now
puts t2 - t1
result
end
speedtest { 1 + 1 }
1.0e-06
=> 2
speedtest { [1, 1].reduce(:+) }
3.0e-06
=> 2
def allow_if_true(method, false_message)
return false_message unless yield
method
end
allow_if_true(top_secret_internet_stuff, "Access Denied") do
session[:username] == "Bill Gates"
end
def do_stuff_to(arr)
return "not an array!" unless arr.class == Array
count = 0
while count < arr.length
yield arr[count]
count += 1
end
arr
end
unless
를 사용하여 올바른 데이터 유형이 있는지 확인합니다.while
루프 및 count
를 사용하여 배열을 반복합니다.do_stuff_to([1, 2, 3]) do |i|
puts i ** 2
end
1
4
9
#=> [1, 2, 3]
|i|
눈치채셨나요? yield에 값을 전달할 때 블록의 파이프 표기법으로 선언하여 값이 있음을 나타냅니다. 내장된 열거 가능한 메서드와 마찬가지로 yield에 전달된 각 값에 대한 매개 변수가 있습니다.폐쇄
솔직히 말해서 이 시점에서 사용자 지정
yield
방법이 일상적인 개발에 얼마나 유용한지 모르겠습니다. 그러나 적어도 이것이 이 개념을 이해하는 데 도움이 되길 바라며, 이러한 개념이 등장했을 때 어떤 일이 일어나는지 더 편안하게 알 수 있기를 바랍니다.건배!
Reference
이 문제에 관하여(생산하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alecgrey/yield-3gl3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)