문제

해킹 언어 형 시스템,가"상"유형으로도 알려진이"모든"유형,또는 보편적인 오브제 형식?즉,종류는 모든 유형의 하위 클래스?

설명서 언급"mixed"유형, 는 비슷한 수 있습니다,하지만 정말로 설명했다.도있는 가능성은 단순히 생략 유형을 선언에서는 몇 가지 장소입니다.그러나,이것은 할 수 없는 곳,예를 들어,하고 싶은 경우 선언 될 뭔가를 함수에서 string 상단에 입력,그것을 명확하지 않는 방법을 내가 이렇게. function (string): mixed?

도움이 되었습니까?

해결책

저는 엔지니어 해킹에 Facebook.이것은 정말로 통찰력 있고 흥미로운 질문입니다.에 따라 정확히 무엇을 얻고 있에서,해킹에는 몇 가지의 다른 변이다.

첫째,하자에 대해 이야기 mixed.그것은 상의 모든 것입니다.예를 들어,이 typechecks:

<?hh // strict
function f(): mixed {
  return 42;
}

하지만 이후 그 이 상의 모든,당신은 할 수 없이 많으로 mixed 값을 때까지 당신은 케이스에서 분석을 실제로 그것이 무엇을 통해, is_int, instanceof, 니다,등등.여기에는 방법의 예를 사용해야 할 것의 결과이 f():

<?hh // strict
function g(): int {
  $x = f();
  if (is_int($x)) {
    return $x;
  } else {
    return 0;
  }
}

"누락 주석"입력("모든")은 약간 다릅니다.반면 mixed 이퍼의 모든 것,"모든" 통합 과 함께 모든 것-그것은 모두퍼 하위의 모든 것입니다.이 경우 있음을 의미를 떠나 해석,우리 가정 당신이 무슨 일을 하고 그것을 전달합니다.예를 들어,다음 코드 typechecks 으로 작성된:

<?hh
// No "strict" since we are omitting annotations
function f2() {
  return 42;
}
function g2(): string {
  return f2();
}

이 명확하지 않는 사운드-우리는 우리가 유형 시스템을 일으키는 원인이 될 것이 런타임 오류는 경우에 우리는 실행 위의 코드-그러나 그것은 인정에서 부분적인 모드에서는 완화하기 위해 변환입니다.엄격한 필요는 당신이 모든 것을 주석,그래서 당신이 얻을 수없는 형식의 값이"모든"에서 휴식 하기 위하여 유형을 시스템에서는 이 방법으로 모든 코드에서 엄격합니다.는 방법을 고려해야 할 것을 주석을 위 코드에서 엄격 모드:나 f2 가 돌아 int 과하는 것 직업 입력 오류가("문자열과 호환되지 않습 int"),또는 f2 가 돌아 mixed 과하는 것 오류로 작성("문자열이 호환이 되지 않으로 혼합된")할 때까지 했을 경우 분석 is_int 등으로 나가서 내 이전의 예입니다.

이 정리할 것--하려는 경우 설명자 알아서 내가 편집한다.는 경우 다른 질문이 있지 않는 엄격한 사항,이의 계속 태그 그들에게"hacklang"그리고 우리는 것을 얻을 수 있는지 확인 응답을!

마지막으로:지 않으면 마음을 누르면"파일 설명서 버그에"문서 페이지를 혼란하거나 불명확하거나 어떤 방식으로 개선시키야 한다고 생각하십니까?우리는 이상적인 원 docs.hhvm.com 하는 one-stop 서비스를 제공 같은 물건이 있지만,확실히 구멍에 있는 문서도 똑똑하고,열성적인 사람들 자신과 같은 도움이 될 것입합니다.(즉,내 생각에 이 재료를 설명하였 음에서 문서지만,때문에 당신이 혼동하는 명확하지 않는 경우,그리고 우리는 정말 감히 당신이 길을 잃었다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top