2017-03-31 90 views
-1

我其實不知道該怎麼稱呼這個問題。提出的標題是我能想到的最好的。Scala中的類型別名

我們目前正在與函數式編程工作在斯卡拉在學校,每隔一段時間也有少數情況下,有些事情沒有意義的事情的方式,我已經習慣了...一個具體的例子是這樣的:

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

val int: Rand[Int] = _.nextInt 

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

我們正在處理此狀態,努力對抗其每一次新的狀態轉移到每一個功能,我們生成使用我們的RNG特徵的新的隨機數的重複。

我的問題是這樣的:

lambda函數表達式定義要作爲我們國家的佔位符謂語「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的每個單獨元素。

我專門找在unitrng =>這樣一個概念上的連接。

+0

'rng'只是另一個'x'或'_'。這是一個接受的論點。在這種情況下,它是一些'RNG'類型的arg /參數。類型'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 

現在,(和uHalfRand類型)元組的另一半隻能是RNG類型,這是不能在代碼示例中定義的。但讓我們假設您有blob類型RNG方便。

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

現在你有了tuple ('q', blob)

你是對的,在List(3,2,1).map(x => ...的示例中,xList提供的值的替代值。在Rand的情況下,是rng在代碼某處以後某個時候/供給的替身(的RNG型)的值。

+0

這幫助我理解它。我沒有意識到它是以咖啡的方式使用的(半個蘭特,就像你說的那樣)。謝啦!你真的碰到了頭部。 – user3407764