>  기사  >  백엔드 개발  >  함수 생성자의 일반 매개변수에서 유형을 유추할 수 없습니다.

함수 생성자의 일반 매개변수에서 유형을 유추할 수 없습니다.

PHPz
PHPz앞으로
2024-02-09 08:00:32581검색

함수 생성자의 일반 매개변수에서 유형을 유추할 수 없습니다.

php 편집기 Youzi는 모든 사람이 공통적으로 묻는 질문, 즉 생성자의 일반 매개변수에서 유형을 추론할 수 없는 이유에 답할 것입니다. PHP에서는 일반 매개변수에 대한 유형 추론이 매개변수의 기본값을 통해 이루어집니다. 그러나 생성자에서는 객체가 생성되기 전에 매개변수가 전달되기 때문에 객체의 인스턴스에서 매개변수의 유형을 유추할 수 없습니다. 이로 인해 생성자에서 일반 매개변수의 유형을 유추할 수 없게 되며, 이 문제를 해결하려면 수동으로 유형을 지정해야 합니다.

질문 내용

일반 매개변수가 있는 "마스터" 유형과 동일한 일반 매개변수를 공유해야 하는 많은 "슬레이브" 유형이 있는 일반 코드가 있습니다. 코드는 다음과 유사합니다.

으아악

기본적으로 사용자는 a 上定义 t ,然后 b 上的 t 应该是相同的。此类代码可以在支持泛型的其他语言中工作,但在 go 中,我在注释行处收到 cannot infer t 编译错误(请参阅此处的 go playground 代码)。在我看来, a 上的类型参数设置为 int ,因此 b 上的类型参数也应设置为 int 。我可以改为调用 newb[int]()에 있어야 하는데, 제 생각에는 너무 장황해 보입니다. 왜 이런 일이 발생합니까?

해결 방법

이것은 "컴파일러가 반환 유형이 사용되는 방식에 따라 유형 매개변수를 추론할 수 없는 이유는 무엇입니까?"에 대한 변형입니다. 답변: Go 1.20부터는 유형 추론이 작동하는 방식이 아니기 때문입니다.

유형 추론적용 대상:

  • 유형 매개변수 목록
  • 알려진 유형 매개변수(있는 경우)로 초기화된 대체 맵 m
  • 일반 함수 인수 목록(비어 있을 수 있음)(함수 호출의 경우에만)

이 규칙을 하나씩 확인해보면:

  • newb() 유형 매개변수 목록이 있나요? 아니요. 유형 매개변수를 지정하지 않고 호출하고 있습니다.

  • 다른 유형 매개변수를 추론하는 데 사용할 수 있는 다른 알려진 유형 매개변수가 있습니까? 아니요, 유형 매개변수를 전혀 제공하지 않았습니다. 이 경우는 유형 매개변수의 일부를 제공하는 함수 호출에 적용됩니다. 예:

    으아악

    상단에서는 t,例如float64,编译器将使用 t -> float64 构造替换映射,然后推断 u -> *float64

    만 제공할 수 있습니다.
  • 마지막으로 일반 함수 매개변수 목록이 있나요? 아니요. newb 비어 있습니다.

그게 다예요. 컴파일러는 함수의 반환 유형이 사용되는 방식에 따라 유형 매개변수를 추론하지 않습니다.

이 글을 쓰는 시점에서 논의 중인 관련 제안은 다음과 같습니다.

위 내용은 함수 생성자의 일반 매개변수에서 유형을 유추할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제