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)
Reference
이 문제에 관하여(AdventCalendar Day10 [초Ruby 시작]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/imaharu/items/0fa5d51d0c0a6f620fa7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)