336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

코세라 스칼라 강좌 4.4 Variance 중.


Typing Rules for Functions 


If A2 <: A1 and B1 <: B2 then

    (A1 => B1) <: (A2 => B2)


뭔 소린지 전혀 몰라서 수시간을 고민해보다가 stackoverflow 보고 이해 


원문 주소는 https://stackoverflow.com/questions/41098105/subtyping-between-function-types 여기


내가 이해한 방식으로 정리한다. 


1. subtype 이다? 

  - subtype 이란건 'a 는 b 이다' 의 is - a 관계가 성립하는거.


2. (A1 => B1) <: (A2 => B2) 임을 증명하려면 

  - '(A1 => B1) 함수(이하 F1)는  (A2 => B2) 함수(이하 F2)다' 가 증명되면 됨.

    

'F1 는 F2 이다 ' 가 true 가 되려면 필요한 규칙은 


F2(a) 를 F1(a) 로 바꿔도 에러 없이 정확한 값이 나와야 한다는 소린데(리스코프의 치환 원칙), 이소리는 즉


1. F2 의 모든 input 이 F1 에서 에러가 없어야 함

2. F1 의 모든 output 이 F2 의 output 이 되어야 함


저 규칙에 맞나 보면 

1. F2 의 모든 input 이 F1 에서 에러가 없어야 함

  -> 만족한다. A2(F2 의 input) <: A1 (F1 의 input) 이기 때문에, A2 는 A1 의 부분집합이고, A2의 모든 원소는 A1 이다.

2. F1 의 모든 output 이 F2 의 output 이 되어야 함 

  -> 만족한다. B1(F1 의 output) <: B2(F2 의 output) 이기 때문에 B1 은 B2 의 부분집합이고, B1 의 모든 원소는 B2 이다.


이 때문에 'F1 은 F2 이다' 는 참이고, F1 은 F2 의 subtype 이다.


맞나 이거? 


    

블로그 이미지

캡틴토마스

그저 걷고 있는거지...

,