【发布时间】:2021-02-23 16:16:38
【问题描述】:
我在this blog 遇到了这个代码块。我想知道h1("Hello World") 自h1(children: Frag*) 以来如何编译。
object TheirCode{
trait Frag{
def render: String
}
// HTML constructors
def div(children: Frag*): Frag
def p(children: Frag*): Frag
def h1(children: Frag*): Frag
...
implicit def stringFrag(s: String): Frag
}
object MyCode{
import TheirCode._
val frag = div(
h1("Hello World"),
p("I am a paragraph")
)
frag.render // <div><h1>Hello World</h1><p>I am a paragraph</p></div>
}
我猜implicit def stringFrag 会自动将h1(String) 转换为h1(Frag),但我一直认为方法参数需要隐式前缀才能工作(即implicit h1(children: Frag*))
【问题讨论】:
-
不,您将
implicitvalues (或参数) 与implicitconversions 混淆了。希望these - materials 帮助。顺便说一句,在这种情况下,作者使用implicitconversions 来模拟magnet pattern。 -
div(h1("Hello World"), p("I am a paragraph"))实际上是div(h1(stringFrag("Hello World")), p(stringFrag("I am a paragraph")))。h1、p没有必要隐含。stringFrag是隐含的就足够了。
标签: scala implicit-conversion implicit