다음과 같은 기능적 파이프라인이 있다고 가정해 보겠습니다.
으아악내가 해결하고 싶은 문제는 상속되었기 때문에 functions
中的函数应该在 opts
中的函数之前调用,所以我不能只附加到 opts
但我必须前置 functions
到opts
(通过 append(functions, opts...)
),然后再次使用 ...
파이프라인의 다음 함수로 보내므로 다음과 같은 이상한 표현이 나옵니다.
얼마나 효율적인지는 모르겠지만 확실히 이상해 보이는 것 같아요,
이 작업을 수행하는 더 좋은 방법이 있어야 합니다. 그것이 제가 찾고 있는 것입니다. p>
하지만 효율성에 대한 설명은 첨부해 주시면 감사하겠습니다 :)
편집:
opts ...functionobject
更改为 opts []functionobject
(如@dev.bmax 在评论中建议的那样),因为我在现有代码库中进行了更改,所以我无法更改调用 func{ 的函数1,2,3}
슬라이스 앞에 추가하는 것은 기본적으로 다음 조합이 필요하므로 비효율적입니다.
함수 간의 호출 규칙을 변경하여 옵션을 추가한 다음 역순으로 처리할 수 있다면 더 효율적일 것입니다. 이렇게 하면 항목을 슬라이스 끝으로 반복적으로 이동하는 것을 방지하고 첫 번째 할당을 제외한 모든 할당을 방지합니다(충분한 공간이 미리 할당된 경우).
으아악참고: func3(opts ...functionobject) / func3(opts...)
和 func3(opts []functionobject) / func3(opts)
는 성능면에서 동일합니다. 전자는 슬라이스를 전달하는 데 효과적인 구문 설탕입니다.
그런데 호출 규칙을 지켜야 한다고 말씀하셨는데...
예제 코드에서는 각 함수 내에서 첫 번째, 두 번째, 세 번째, 다섯 번째... 추가 할당이 발생합니다. (작은 슬라이스의 경우) 지원 배열 크기를 두 배로 늘리려면 할당이 필요합니다. append(functions, opts...)
이전 추가로 충분한 여유 용량이 생성되지 않은 경우에도 할당될 수 있습니다.
도우미 기능을 사용하면 코드를 더 읽기 쉽게 만들 수 있습니다. 재사용도 가능합니다. opts
어레이의 예비 용량 지원:
할당을 더 자세히 설명하기 위한 도우미 함수가 없는 일부 대안:
으아악앞에 추가할 항목이 포함된 슬라이스를 할당하지 않고 한 단계 더 나아가 opts
의 여유 용량을 재사용할 수 있습니다(기능당 0-1 할당). 그러나 이는 복잡하고 오류가 발생하기 쉬우므로 권장하지 않습니다.
위 내용은 이동 | 슬라이스를 추가하고 가변 기능으로 보내는 효율적이고 읽기 쉬운 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!