>

다음 명령을 썼습니다 :

jq -n 'reduce empty as $e (0; .)'

jq -n 'foreach empty as $e (0; .; .)'

그리고 나는 둘 다 아무것도 산출하지 않을 것으로 기대했다 (또는 0, 나는 비슷한 구조체들 사이의 일관성을 기대하고 있었다). 그러나 결과가 일치하지 않습니다.

$ jq -n 'reduce empty as $e (0; .)'
0
$ jq -n 'foreach empty as $e (0; .; .)'
$

매뉴얼 :

emptyreturns no results. None at all. Not even null. It's useful on occasion. You'll know if you need it :)

그리고 나는 이것을 모든 것을 흡수하는 블랙홀처럼 해석했습니다 (잘못되었을 수도 있습니다). 그러나 발전기로 사용될 때, reduce   foreach 동안 초기 값을 전달합니다.  하지 않습니다. 나는 어느 것이 논리적으로 행동하는지 모르겠지만 나는 foreach 에 있습니다. 의 편입니다.

이 차이에 대한 설명을 찾을 수 없었으며 이해하기 쉬운 것을 생각할 수 없었습니다. 왜 reduce 를 이해할 수 있습니까?  그리고 foreach  발전기가 empty 일 때 다르게 행동 ?

  • 답변 # 1

    Reduce는 주어진 컬렉션에 대한 축소 기능입니다. 초기 시드가 주어지면 각 값의 값을 업데이트하고 최종 결과를 반환합니다.

    Foreach는 reduce와 비슷하지만 최종 결과를 반환하지 않고 대신 각 값의 모든 중간 결과를 반환한다는 점에서 다릅니다.

    forp 호출에서 반복이 수행되지 않으므로 결과가 생성되지 않습니다. 반면 축소는 또한 반복이 없으므로 초기 시드 ( 0 )가 변경되지 않습니다. )이 반환됩니다.

    <시간>

    이것이 도움이된다면 다음 파이썬 코드와 다소 같습니다 :

    def reduce(in, get_items, get_seed, update):
        current = get_seed(in)
        for item in get_items(in):
            current = update(current, item)
        return current
    def foreach(in, get_items, get_seed, update, extract):
        current = get_seed(in)
        for item in get_items(in):
            current = update(current, item)
            yield extract(current, item)
    
    

관련 자료

  • 이전 프로그래밍 방식으로 Monaco 편집기에서 텍스트의 위치를 ​​찾는 방법
  • 다음 kubernetes - Statefulset 및 헤드리스 서비스의 포드가 올바른 DNS 레코드를 얻지 못함