이 기사에서는 PHP 편집기 Strawberry가 유형 매개변수 없이 일반 구조의 유형 이름을 얻는 방법을 소개합니다. 제네릭은 특정 유형을 지정하지 않고도 일반 코드를 작성할 수 있는 강력한 프로그래밍 기술입니다. 그러나 때로는 특정 유형 매개변수를 포함하지 않고 일반 구조의 유형 이름을 얻어야 할 수도 있습니다. 이 기사에서는 이 질문에 대해 자세히 답변하고 일반 프로그래밍을 더 잘 이해하고 적용하는 데 도움을 줄 것입니다.
다음과 같이 각각을 식별하는 foo
的通用结构,我从中创建了两个对象。我可以使用 reflect.typeof()
라는 특정 유형이 있다고 가정해 보겠습니다.
저는 이러한 객체의 공통 유형(예: foo
),而不是具体类型(即 foo[string]
和 foo[int]
)을 결정하는 데 관심이 있습니다. 이것이 가능합니까, 아니면 이러한 문자열에서 일반 유형을 수동으로 추출해야 합니까(예: 정규식 사용)?
정규 표현식은 다음과 같습니다:
으아악나도 이 질문을 봤지만 특정 유형(예: main.foo[string]
)而不是通用类型(即, foo
)을 제공하기 때문에 질문에 대한 답변이 아닙니다.
기본 유형이 런타임에 존재하지 않기 때문에 Reflection은 "기본" 일반 유형의 이름을 볼 수 없습니다.
go 사양의 관련 단락은 instantiation입니다.
유형을 인스턴스화하면 제네릭이 아닌 새로운 이름의 유형이 생성됩니다. 함수를 인스턴스화하면 제네릭이 아닌 새로운 함수가 생성됩니다.
글을 쓸 때:
으아악타입 이름은 바로 foo[int]
입니다.
형 인수 목록이 없는 식별자 foo
는 컴파일 타임에 관련이 있다는 점에 주목할 가치가 있습니다. 동일한 패키지에서 이를 다시 선언하는 것을 방지하기 때문입니다. 유형 정의:
유형 정의는 동일한 유형으로 새롭고 다른 유형을 생성합니다. 기본 유형과 작업은 유형과 경계로 제공됩니다. 식별자, 이름 입력, 제공 .
으아악그러나 위에서 언급한 것처럼 인스턴스화는 foo
과 다른 새로운 명명된 유형을 생성하며, 런타임에는 리플렉션을 사용할 수 있는 경우에만 인스턴스화를 처리합니다.
요약하자면, 일부 도우미 함수가 stdlib에 추가되기 전까지는 정규식 솔루션이 허용된다고 생각합니다. 명확성을 위해 여기에 다시 게시합니다:
으아악 type.string()
和 type.name()
의 차이점을 기억하세요. 모든 유형은 문자열 표현을 가질 수 있지만 명명된 유형에만 이름이 있습니다. (분명히 그렇죠?) 예를 들어 다음과 같이 작성했다면:
그런 다음 b
的类型为*foo[int]
,为匿名复合类型,name()
는 빈 문자열을 반환합니다.
위 내용은 유형 매개변수 없이 일반 구조체의 유형 이름 가져오기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!