小编vas*_*ase的帖子

如何在Scala中以递归方式应用隐含转换

我正在尝试编写一个转换库,用于将一些scala类型转换为HTML表示.比方说,我想要执行List(1,2).toHtml和获取<ul><li>1</li><li>2</li></ul>,作为一个String.
到目前为止,我已经编写了一组隐式转换,它们可以很好地检测结果类型并应用正确的结果toHtml.

让我展示一个示例:

object Conversions {

  implicit def fromIterable[A](l : Iterable[A]) = new Object {
       def toHtml = <ul> { l.map{ e => <li>{ e }</li> } } </ul> toString
  }
}
import Conversions._
Run Code Online (Sandbox Code Playgroud)

有了这段代码,每当我问编译器时,List(1,2).toHtml我得到正确的转换.就像任何其他Iterableval一样.

我的问题和问题是如何递归地使用这个toHtml转换?因为如果我输入List( List(1,2), List(3,4) ).toHtml我想要获得<ul> <li><ul><li>1</li><li>2</li></ul></li> <li><ul><li>3</li><li>4</li></ul></li> </ul>,toHtml转换应用递归地应用于输入的每个元素Iterable.

我试图将toHtml定义更改为def toHtml = <ul> { l.map{ e => <li>{ e.toHtml }</li> } } </ul> toString …

recursion scala implicits

3
推荐指数
1
解决办法
195
查看次数

标签 统计

implicits ×1

recursion ×1

scala ×1