2017-03-31 12 views
-1

나는이 질문을 실제로 무엇이라고 부를지 모른다. 제시된 제목이 내가 생각할 수있는 최선이었습니다.스칼라에서 앨리어싱 유형

우리는 현재 스칼라에서 학교에서 함수 프로그래밍을하고 있으며, 때로는 내가 익숙한 것들의 방식에 뭔가 의미가없는 경우가 있습니다. :

type Rand[+A] = RNG => (A, RNG) 

val int: Rand[Int] = _.nextInt 

def unit[A](a: A): Rand[A] = 
    rng => (a, rng) 

우리는 우리가 우리의 RNG의 특성을 사용하여 새 난수를 생성하는 각 기능마다 새로운 상태를 전송해야하는 반복을 방지하기 위해 노력하고, 여기 상태로 다루고있다.

람다 함수 표현식은 우리의 국가를위한 장소 홀더로 사용되는 술어 "rng =>을"정의

내 질문은 이것이다. 일반적으로이 술어가 정의하는 내용은 List.map(x => x)과 같이 명확합니다. 여기서 x는 목록의 각 요소입니다. 그러나 무엇이 rng 여기에 있는지 명확하지 않습니다.

편집 : 나는 랜드 [A] 나타내는 어떤 질문 아니에요 ... 어떤 사람들은 내가 여기에 명확하게 몇 가지 더 예를 줄 것이다 질문을 이해하지 못했다

을 것 같아요. 내가받은 인수 rng =>은 위지도의 예에서 예를

def map[A,B](l: List[A])(f: A => B): List[B] = ... 
val l = List(1,2,3,4,5) 
// l.map(x => x+1) -> List(2,3,4,5,6) 

용으로 해석하도록되어 무엇을 요구하고, 그것은이다 매우 쉽게 개념적으로 이해하는 그 기능에 의해 주어진받은 인수 x => 인수 f은 목록 l의 개별 요소로 해석되어야합니다.

rng =>과 같은 개념적 연결을 구체적으로 찾고 있는데 unit입니다.

+0

'rng'은 또 다른'x' 또는'_'입니다. 접수 된 인수입니다. 이 경우'RNG' 타입의 arg/parameter입니다. 'Rand'유형은 'RNG'을 수신하고 튜플을 생성하는 함수입니다. – jwvh

답변

4

좋아요, 제가 가겠습니다.

def unit[A](a: A): Rand[A] = rng => (a, rng) 

여기서 unit은 하나의 인수를 취하고 튜플의 절반을 구성합니다. 완성 된 튜플을 빌드하는 방법을 리턴합니다. 때문에 유형 Rand의 정의 지금

val uHalf = unit('q') // this is the "a" parameter 

, 튜플의 나머지 절반은 당신의 코드 예제에 정의되지 않은 유형 RNG, 될 수있는 (그리고 uHalf 유형 Rand이다). 하지만 blob 유형이 RNG이면 편리하다고 가정 해 보겠습니다.

val tup = uHalf(blob) // this is the "rng" parameter 

이제 튜플 ('q', blob)이 있습니다.

예, List(3,2,1).map(x => ...의 경우 에서 제공된 값의 경우 스탠드가 x입니다. Rand의 경우 rng은 (RNG 유형의) 값이 언젠가/나중에 코드의 어딘가에 제공되는 스탠드입니다.

+0

이것은 이해하는데 도움이되었습니다. 나는 그것이 카레 방식으로 사용된다는 것을 깨닫지 못했습니다 (당신이 넣은 반쪽 - 땅). 고마워요! 너는 머리에 못을 박았다. – user3407764