1

这段代码行在做什么?这是另一种表示法的语法糖吗?

def createItem(itemText: String) = <.li(itemText)
<.ul(props map createItem: _*)                       <-- this one
4

1 回答 1

3

我假设从纯粹的句法角度来看,你觉得这行太奇怪了。

<是另一个名字奇怪的实体的成员html_<^

<Gizmo 是HtmlTags类型,特别是它有方法liul,对应于标签<li><ul>

因此<.ul(foobar)是对带有参数<的方法的方法调用。ulfoobar

foo: _*语法用于将集合传递给可变参数方法。

总结一下:

  • props是一些集合
  • 使用函数映射createItem,然后将结果
  • 作为可变参数传递给ul方法
  • HtmlType-typed<成员
  • 对象/包html_<^

因此,本质上,它只是构建了某种无序列表。

以下是项目 github 页面关于这些方法命名的简要说明:

标签和标签属性是命名空间的;< 下的标签(因为 <.div 看起来类似于 ),以及 ^ 下的属性(因为需要简洁的东西,并且您通常有许多写在新行上的属性看起来都指向目标标签)。

于 2018-03-12T22:17:06.213 回答