AdventCalendar Day10 [초Ruby 시작]

6225 단어 Ruby

개시하다


이 기사는 초Ruby 시작 열흘째 보도입니다.
메모를 남겨주시면 읽으세요지도 방침.

메시지

%w[Ruby, Python, PHP].map { |str| str.length }
맵 {} 이 코드 못 봤어요?
p Enumerator.method_defined?(:map)
> true
맵은 Enumerator 객체의 방법입니다.
모든 원소 평가 블록의 모든 결과를 포함하는 그룹을 되돌려줍니다.
블록을 생략하면 위에서 설명한 반복을 수행하고 결과 배열을 반환하는 등 Enumerator 객체가 반환됩니다.Enumberable 모듈
무엇이 블로킹입니까?
순환을 이루고 집과 담을 짓고 사람을 때리는 물건.
루비 용어집

블록은 루비에서 가장 많이 사용되는 구문입니다.
그럼, 여기가 문제야.
아래 코드의 어디에 블록이 숨겨져 있습니까?
%w[Ruby, Python, PHP].map { |str| str.length }
정답은 {}의 섹션입니다.
{ |str| str.length }
블록은 항상 블록을 가지고 있는 방법과 함께 사용된다.
너는 여러 개의 균형기의 문법이 있는지 아니?
method(arg1, arg2, ...)  do [`|' 式 ... `|'] 式 ... end
method(arg1, arg2, ...) `{' [`|' 式 ... `|'] 式 ... `}'
method(arg1, arg2, ..., `&' proc_object)
위에서 말한 바와 같이 세 가지 문법이 있다.지금까지 본 것은 바로 가운데의 문법이다.
상자 문법 {} 대신 Do~end를 사용하면 다음 코드를 사용합니다.
%w["Ruby", "Python", "PHP"].map do |str|
    str.length
end
균형기는 순환처럼 보인다.
순환하면 for 문법이 떠오르지 않습니까?
그럼 for문법과 균형기의 차이를 조사해 봅시다.
# for
for i in [1, 2, 3, 4, 5]
    for_last = i
end
puts "for #{for_last}"

# iterator
[1, 2, 3, 4, 5].each do | num |
    last = num
end
puts "iterator #{last}"
상기 코드를 실행할 때 균형기에 오류가 발생했습니다.
네!for 문법과 균형기의 작용 범위는 다르다.
블록은 새로운 로컬 변수를 가지고 있지만 for문은 로컬 변수의 범위에 영향을 주지 않습니다.
맵이 뭘 하는지 이해가 되시죠?
%w[Ruby, Python, PHP].map { |str| str.length }
아마 맵으로 힘들 때겠죠.
괜찮아, 다음이 마지막이야.우리 따라 봅시다.
아, 읽는 법이야.이덕입니다.
자신이 정의한 균형기로 블록을 호출할 때 yield를 사용합니다.
이유를 모르니까 코드를 봐요.
def check_yield
    yield
end

check_yield { puts "pass check_yield" }
check_yield 방법을 호출하면, yield는 이 블록을 호출합니다.
다음에 인자를 이엘드에게 건네주세요.
def check_yield_argvs
    yield(1)
end

puts check_yield_argvs { | x | x + 2 }
일드(1)의 1은 어디로 대입될까.
정답은 블록 매개 변수입니다.
check_yield_argvs { | block_parameter | x + 2 }
이상은 네모난 블록의 설명입니다!

시간 날 때 하는 거.


yield(self)

좋은 웹페이지 즐겨찾기