[英]Scala: How to define anonymous function with implicit parameter?
我想以這樣的方式定義一個帶隱式參數的函數:
// imports to add scope of A
{
implicit a: A => {
// some action
}
}.apply()
// somewhere in the code
class A
val a: A = new A
但是我的Scala
編譯器沒有編譯它。 它說: Cannot resolve reference apply with such signature
。 但是,參數是隱式的,所以我猜編譯器應該在范圍內查找並找到一個合適的對象。
這是真的嗎? 如果沒有,那么我該如何解決呢?
你不能。 只有方法可以有隱式參數。
當你這樣做:
// val f: A => Unit =
{
implicit a: A => {
// some action
}
}
你實際上是在聲明一個類型為A => Unit
的匿名函數,並且你在函數體中聲明了a
隱含的參數a
您可以使用磁鐵模式獲得接近您想要的東西:
class A
case class Magnet()
object Magnet {
implicit def fromUnit(arg1: Unit)(implicit a: A) = Magnet()
}
object Test extends App {
implicit val a = new A
{
args: Magnet => {
//...
}
}.apply()
}
你會得到一個棄用警告,因為磁鐵必須至少有一個參數而我使用了Unit
,你應該像.apply(())
一樣調用它來避免它
正如Giovanni所說:你不能有這樣的參數。
但是,您可以implicitly
使用來解決函數中的含義:
case class Foo(text : String)
implicit val foo = Foo("World")
(() => {
val implFoo : Foo = implicitly[Foo]
println(s"Hello ${implFoo.text}")
}).apply()
(但說實話,這聽起來好像可以寫得更好,而且你正在進行意大利面條代碼領域與你正在做的事情。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.