php 편집기 Youzi는 모든 사람이 공통적으로 묻는 질문, 즉 생성자의 일반 매개변수에서 유형을 추론할 수 없는 이유에 답할 것입니다. PHP에서는 일반 매개변수에 대한 유형 추론이 매개변수의 기본값을 통해 이루어집니다. 그러나 생성자에서는 객체가 생성되기 전에 매개변수가 전달되기 때문에 객체의 인스턴스에서 매개변수의 유형을 유추할 수 없습니다. 이로 인해 생성자에서 일반 매개변수의 유형을 유추할 수 없게 되며, 이 문제를 해결하려면 수동으로 유형을 지정해야 합니다.
일반 매개변수가 있는 "마스터" 유형과 동일한 일반 매개변수를 공유해야 하는 많은 "슬레이브" 유형이 있는 일반 코드가 있습니다. 코드는 다음과 유사합니다.
으아악기본적으로 사용자는 a
上定义 t
,然后 b
上的 t
应该是相同的。此类代码可以在支持泛型的其他语言中工作,但在 go 中,我在注释行处收到 cannot infer t
编译错误(请参阅此处的 go playground 代码)。在我看来, a
上的类型参数设置为 int
,因此 b
上的类型参数也应设置为 int
。我可以改为调用 newb[int]()
에 있어야 하는데, 제 생각에는 너무 장황해 보입니다. 왜 이런 일이 발생합니까?
이것은 "컴파일러가 반환 유형이 사용되는 방식에 따라 유형 매개변수를 추론할 수 없는 이유는 무엇입니까?"에 대한 변형입니다. 답변: Go 1.20부터는 유형 추론이 작동하는 방식이 아니기 때문입니다.
유형 추론적용 대상:
이 규칙을 하나씩 확인해보면:
newb()
유형 매개변수 목록이 있나요? 아니요. 유형 매개변수를 지정하지 않고 호출하고 있습니다.
다른 유형 매개변수를 추론하는 데 사용할 수 있는 다른 알려진 유형 매개변수가 있습니까? 아니요, 유형 매개변수를 전혀 제공하지 않았습니다. 이 경우는 유형 매개변수의 일부를 제공하는 함수 호출에 적용됩니다. 예:
으아악상단에서는 t
,例如float64
,编译器将使用 t -> float64
构造替换映射,然后推断 u -> *float64
마지막으로 일반 함수 매개변수 목록이 있나요? 아니요. newb
비어 있습니다.
그게 다예요. 컴파일러는 함수의 반환 유형이 사용되는 방식에 따라 유형 매개변수를 추론하지 않습니다.
이 글을 쓰는 시점에서 논의 중인 관련 제안은 다음과 같습니다.
위 내용은 함수 생성자의 일반 매개변수에서 유형을 유추할 수 없습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!