第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

=>、()=>和Unit=>之間有什么區(qū)別?

=>、()=>和Unit=>之間有什么區(qū)別?

=>、()=>和Unit=>之間有什么區(qū)別?我試圖表示一個不帶參數(shù)且不返回值的函數(shù)(如果您必須知道的話,我將在JavaScript中模擬setTimeout函數(shù))。case class Scheduled(time : Int, callback :  => Unit)不編譯,說“‘val’參數(shù)可能不是按名調(diào)用”。case class Scheduled(time : Int, callback :  () => Unit)編譯,但必須奇怪地調(diào)用,而不是Scheduled(40, { println("x") } )我必須這么做Scheduled(40, { () => println("x") } )同樣有效的是class Scheduled(time : Int, callback :  Unit => Unit)但卻以一種更不明智的方式被調(diào)用。 Scheduled(40, { x : Unit => println("x") } )(單元類型的變量是什么?)我想要當(dāng)然,它是一個構(gòu)造函數(shù),如果它是一個普通函數(shù),可以我調(diào)用它的方式調(diào)用它: Scheduled(40, println("x") )把他的瓶子給孩子!
查看完整描述

3 回答

?
狐的傳說

TA貢獻(xiàn)1804條經(jīng)驗 獲得超3個贊

case class Scheduled(time : Int, callback :  => Unit)

這個case修飾語使隱含val從每個參數(shù)中取出構(gòu)造函數(shù)。因此(正如有人指出的)如果你移除case您可以使用按名稱調(diào)用的參數(shù)。編譯器可能無論如何都允許它,但是如果它創(chuàng)建了val callback而不是變成lazy val callback.

當(dāng)你改變到callback: () => Unit現(xiàn)在,您的情況只是接受一個函數(shù),而不是一個按名稱調(diào)用的參數(shù)。顯然,該函數(shù)可以存儲在val callback所以沒問題。

得到你想要的東西的最簡單的方法(Scheduled(40, println("x") )其中,使用按名稱調(diào)用參數(shù)傳遞lambda)可能是跳過case并顯式創(chuàng)建apply你一開始是無法得到的:

class Scheduled(val time: Int, val callback: () => Unit) {
    def doit = callback()}object Scheduled {
    def apply(time: Int, callback: => Unit) =
        new Scheduled(time, { () => callback })}

在使用中:

scala> Scheduled(1234, println("x"))res0: Scheduled = Scheduled@5eb10190

scala> Scheduled(1234, println("x")).doit
x


查看完整回答
反對 回復(fù) 2019-07-15
?
qq_花開花謝_0

TA貢獻(xiàn)1835條經(jīng)驗 獲得超7個贊

在這個問題中,您希望用JavaScript模擬SetTimeOut函數(shù)。根據(jù)以前的答案,我編寫了以下代碼:

class Scheduled(time: Int, cb: => Unit) {
  private def runCb = cb}object Scheduled {
  def apply(time: Int, cb: => Unit) = {
    val instance = new Scheduled(time, cb)
    Thread.sleep(time*1000)
    instance.runCb  }}

在REPL中,我們可以得到如下內(nèi)容:

scala> Scheduled(10, println("a")); Scheduled(1, println("b"))a
b

我們的模擬行為與SetTimeOut不同,因為我們的模擬是阻塞功能,但SetTimeOut是非阻塞的。


查看完整回答
反對 回復(fù) 2019-07-15
  • 3 回答
  • 0 關(guān)注
  • 804 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號