유형 사양 연산자는 객체 지향 언어의 다운 캐스팅과 같습니다.

Ashutosh

나는 First Principles의 책 Haskell Programming을 읽고 다음 코드 스 니펫을 발견했습니다.

Prelude> fifteen = 15
Prelude> :t fifteen
fifteen :: Num a => a
Prelude> fifteenInt = fifteen :: Int
Prelude> fifteenDouble = fifteen :: Double
Prelude> :t fifteenInt
fifteenInt :: Int
Prelude> :t fifteenDouble
fifteenInt :: Double

여기서 Num 은 OO 언어의 기본 클래스와 같은 유형 클래스입니다. 내가 의미하는 것은 다형성 함수를 작성할 때 Num 유형 클래스에 의해 제한되는 유형 변수한다는 것입니다 . 그러나 위에서 본 것처럼 캐스팅 또는 작동합니다. OO 언어로 다운 캐스팅하는 것과 같지 않나요?fifteenIntDouble

그렇게하려면 더 많은 정보 ( Double이 경우에는 유형별 함수)가 필요하지 않습니까?

도와 주셔서 감사합니다.

좌회전

아니요, 동일하지 않습니다. OO의 다운 캐스팅은 런타임 작업입니다. 구체적인 유형을 모르는 값이 있고 기본적으로 특정 케이스가 있다고 주장합니다. 실제로 다른 구체적인 유형일 경우 오류입니다.

Haskell에서 ::실제로는 운영자가 아닙니다. 컴파일 타임에 typechecker 추가 정보를 추가합니다 . 즉, 컴파일이 되어도 실제로 런타임에 작동하는지 항상 확신 할 수 있습니다.

그것이 전혀 작동하는 이유 fifteen구체적인 유형 없기 때문 입니다. OO 언어 템플릿 / 일반 과 같습니다 . 당신이 추가 할 때 그래서 :: Double제약, 컴파일러는 수 다음 유형이 무엇인지 선택 인스턴스화 를 위해 a. 그리고 typeclassDouble 의 멤버이기 때문에 괜찮습니다 . 그러나 typeclass를 OO 클래스와 혼동하지 마십시오. OO 클래스는 하나의 구체적인 유형을 지정하지만 하위 유형을 가질 수 있습니다 . Haskell에서는 하위 유형이 존재하지 않으며 클래스는 OO 언어 인터페이스 와 비슷합니다 . 또한 같은 typeclass 생각할 수있는 유형의 설정 , 그리고 잠재적으로 모든 유형이있다Num fifteenNum수업; 이들 중 실제로 사용되는 것은 서명으로 선택할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

" 'object'유형의 다른 지원 객체 '[object Object]'를 찾을 수 없습니다. NgFor는 배열과 같은 Iterable에 대한 바인딩 만 지원합니다."

분류에서Dev

Swift : NSObject를 다른 유형의 UI 객체로 캐스팅

분류에서Dev

런타임 클래스는 같지만 정적 유형이 다른 객체의 성능이 다릅니다.

분류에서Dev

검사의 짧은 버전은하지의 객체의 결과는 다음 자바 부울와 세트로 캐스팅 null의 경우

분류에서Dev

객체 지향 설계의 다양성

분류에서Dev

"유형의 개체를 캐스팅 할 수 없습니다."오류 메시지

분류에서Dev

Scala의 객체는 어떻게 자체 유형과 관련없는 특성의 교차점으로 캐스팅 될 수 있습니까?

분류에서Dev

자바 객체를 임의의 다른 유형으로 캐스팅하는 방법

분류에서Dev

C ++에서 업 캐스팅과 다운 캐스팅이 사용되는 이유는 무엇입니까?

분류에서Dev

다양한 유형의 객체를 지원해야하는 RealmList 구현 방법 및 모범 사례

분류에서Dev

FormData () 객체는 Firefox에서 양식의 제출 유형 입력을 추가하지 않습니다.

분류에서Dev

유형 캐스팅 된 객체를 업데이트하면 유형 캐스팅되지 않은 객체가 업데이트됩니다.

분류에서Dev

'SingleResult'유형의 개체를 캐스팅 할 수 없습니다.

분류에서Dev

유형의 개체를 캐스팅 할 수 없습니다.

분류에서Dev

Javascript 익명 객체를 유형이 지정된 객체로 캐스팅 할 수 있습니까? 어떻게?

분류에서Dev

as에 의한 다운 캐스팅은 어떻습니까! 같은 유형에서 작동합니까?

분류에서Dev

Option Strict On은 피연산자 유형 객체를 금지합니다.

분류에서Dev

유형 검사기 :`n '에 대한 선언이 제공되었지만`n'에는 다음과 같은 정의가 없습니다. n

분류에서Dev

다양한 유형의 자식 객체에 대한 Libgdx 풀

분류에서Dev

확산 연산자가 전체 개체를 복사하지 않는 것 같습니다.

분류에서Dev

이 피연산자와 일치하는 연산자 ">>"가 없습니다. 피연산자 유형은 다음과 같습니다. std :: istream >> const double

분류에서Dev

이 피연산자와 일치하는 연산자 "<"가 없습니다. 피연산자 유형은 다음과 같습니다. double <my_class

분류에서Dev

"Int64"nullable 정수 유형으로 캐스팅이 더 이상 작동하지 않는 것 같습니다.

분류에서Dev

객체 지향 언어에서 유형 추론이 비현실적인 이유는 무엇입니까?

분류에서Dev

다른 유형의 객체를 선언하기 위해 __declspec (align)을 사용하는 방법이 있습니까?

분류에서Dev

객체 지향 유효성 검사 클래스를 만드는 데 도움이 필요합니다.

분류에서Dev

유형 A를 유형 B로 캐스팅 할 수 없습니다. LINQ to Entities는 EDM 기본 형식 또는 열거 형 유형 캐스팅 만 지원합니다.

분류에서Dev

PHP 메소드는 두 가지 유형의 객체를 얻습니다.

분류에서Dev

유효성 검사에서 " 'BaseModel'유형의 개체를 'DerivedModel'유형으로 캐스팅 할 수 없습니다."가 발생합니다.

Related 관련 기사

  1. 1

    " 'object'유형의 다른 지원 객체 '[object Object]'를 찾을 수 없습니다. NgFor는 배열과 같은 Iterable에 대한 바인딩 만 지원합니다."

  2. 2

    Swift : NSObject를 다른 유형의 UI 객체로 캐스팅

  3. 3

    런타임 클래스는 같지만 정적 유형이 다른 객체의 성능이 다릅니다.

  4. 4

    검사의 짧은 버전은하지의 객체의 결과는 다음 자바 부울와 세트로 캐스팅 null의 경우

  5. 5

    객체 지향 설계의 다양성

  6. 6

    "유형의 개체를 캐스팅 할 수 없습니다."오류 메시지

  7. 7

    Scala의 객체는 어떻게 자체 유형과 관련없는 특성의 교차점으로 캐스팅 될 수 있습니까?

  8. 8

    자바 객체를 임의의 다른 유형으로 캐스팅하는 방법

  9. 9

    C ++에서 업 캐스팅과 다운 캐스팅이 사용되는 이유는 무엇입니까?

  10. 10

    다양한 유형의 객체를 지원해야하는 RealmList 구현 방법 및 모범 사례

  11. 11

    FormData () 객체는 Firefox에서 양식의 제출 유형 입력을 추가하지 않습니다.

  12. 12

    유형 캐스팅 된 객체를 업데이트하면 유형 캐스팅되지 않은 객체가 업데이트됩니다.

  13. 13

    'SingleResult'유형의 개체를 캐스팅 할 수 없습니다.

  14. 14

    유형의 개체를 캐스팅 할 수 없습니다.

  15. 15

    Javascript 익명 객체를 유형이 지정된 객체로 캐스팅 할 수 있습니까? 어떻게?

  16. 16

    as에 의한 다운 캐스팅은 어떻습니까! 같은 유형에서 작동합니까?

  17. 17

    Option Strict On은 피연산자 유형 객체를 금지합니다.

  18. 18

    유형 검사기 :`n '에 대한 선언이 제공되었지만`n'에는 다음과 같은 정의가 없습니다. n

  19. 19

    다양한 유형의 자식 객체에 대한 Libgdx 풀

  20. 20

    확산 연산자가 전체 개체를 복사하지 않는 것 같습니다.

  21. 21

    이 피연산자와 일치하는 연산자 ">>"가 없습니다. 피연산자 유형은 다음과 같습니다. std :: istream >> const double

  22. 22

    이 피연산자와 일치하는 연산자 "<"가 없습니다. 피연산자 유형은 다음과 같습니다. double <my_class

  23. 23

    "Int64"nullable 정수 유형으로 캐스팅이 더 이상 작동하지 않는 것 같습니다.

  24. 24

    객체 지향 언어에서 유형 추론이 비현실적인 이유는 무엇입니까?

  25. 25

    다른 유형의 객체를 선언하기 위해 __declspec (align)을 사용하는 방법이 있습니까?

  26. 26

    객체 지향 유효성 검사 클래스를 만드는 데 도움이 필요합니다.

  27. 27

    유형 A를 유형 B로 캐스팅 할 수 없습니다. LINQ to Entities는 EDM 기본 형식 또는 열거 형 유형 캐스팅 만 지원합니다.

  28. 28

    PHP 메소드는 두 가지 유형의 객체를 얻습니다.

  29. 29

    유효성 검사에서 " 'BaseModel'유형의 개체를 'DerivedModel'유형으로 캐스팅 할 수 없습니다."가 발생합니다.

뜨겁다태그

보관