15
A
回答
17
給出更理論上的答案:const是SKI calculus的K組合子。當你使用相當抽象的概念時,有時候它會彈出,而你沒有太多的「工作」。考慮一個(Haskell風格)Functor特性:
trait Functor[F[_]] {
def fmap[A,B](f:A=>B, fa: F[A]):F[B]
//(<$) in Haskell
def left[A,B](a:A, fb:F[B]):F[A]
}
現在fmap需要是抽象的,因爲它是函子的本質。但是,我們可以寫留下了一般實現,在這裏,我們需要常量:
trait Functor[F[_]] {
def fmap[A,B](f:A=>B, fa: F[A]):F[B]
//(<$) in Haskell
def left[A,B](a:A, fb:F[B]):F[A] =
fmap(Function.const(a), fb)
}
測試與選項:
case object OptionFunctor extends Functor[Option] {
def fmap[A,B] (f:A=>B, fa:Option[A]):Option[B] = fa match {
case Some(a) => Some(f(a))
case None => None
}
}
//left works:
OptionFunctor.left("test",Some(42))
//--> Option[java.lang.String] = Some(test)
OptionFunctor.left("test",None:Option[Int])
//--> Option[java.lang.String] = None
正如你可以看到左邊做的事情應該(在一些仿函數包裝值當我們在第二個參數中已經有了這個仿函數的「角色模型」或「模式」)。定義它非常抽象而不知道函子種類的任何事情只能通過使用const來實現。
21
將它作爲參數傳遞給高階函數很有用。例如,與相同的元素替換列表中的所有元素:
scala> List(1, 2, 3, 4, 5).map(Function.const(7))
res1: List[Int] = List(7, 7, 7, 7, 7)
你當然也可以寫
scala> List(1, 2, 3, 4, 5).map(_ => 7)
res2: List[Int] = List(7, 7, 7, 7, 7)
根據上下文,一個可能比其他更易讀。
相關問題
- 1. 什麼是access_token,什麼是使用目的或它用於什麼目的?
- 2. Promise.Resolve的目的是什麼?
- 3. 包的目的是什麼
- 4. sun.jvm.hotspot.HelloWorld的目的是什麼?
- 5. ApplicationBuilder.Properties的目的是什麼?
- 6. NSNotification的目的是什麼
- 7. `Data.Proxy`的目的是什麼?
- 8. String.IsInterned的目的是什麼?
- 9. 宏的目的是什麼?
- 10. Imposteriser的目的是什麼?
- 11. 'R'的目的是什麼?
- 12. IntentSender的目的是什麼?
- 13. 什麼是@的目的PHP
- 14. 什麼是.`ToListAsync的目的()`
- 15. Ember.Deferred的目的是什麼?
- 16. Regex.Escape的目的是什麼?
- 17. SpringContextLoaderListener的目的是什麼
- 18. #line - 的目的是什麼?
- 19. GetPrivateProfileString的目的是什麼?
- 20. onSurfaceChanged的目的是什麼?
- 21. CultureInfo.CurrentCulture的目的是什麼?
- 22. 什麼是Membership.ValidateUser()的目的
- 23. javax.servlet.FilterChain的目的是什麼?
- 24. UIViewController.topLayoutGuide的目的是什麼?
- 25. TabPage.Hide()的目的是什麼
- 26. IEnumerator的目的是什麼
- 27. XNoImplicitPrelude的目的是什麼?
- 28. get:set的目的是什麼?
- 29. EasyMock.andVoid()的目的是什麼?
- 30. SetDefaultFieldSortScoring的目的是什麼?