gpt4 book ai didi

xml - 如何根据选项添加或不添加 XML 属性?

转载 作者:数据小太阳 更新时间:2023-10-29 01:40:31 25 4
gpt4 key购买 nike

我写了一个 makeMsg 函数,但我不喜欢它 - 它似乎真的不符合 Scala 风格,可以根据 Option.isDefined 进行区分。你能做得更好吗?

scala> def makeMsg(t: Option[String]) = 
| if (t.isDefined) <msg text={t.get} /> else <msg />
makeMsg: (t: Option[String])scala.xml.Elem

scala> makeMsg(Some("hello"))
res0: scala.xml.Elem = <msg text="hello"></msg>

scala> makeMsg(None)
res1: scala.xml.Elem = <msg></msg>

最佳答案

你可以试试这个:

def makeMsg(t: Option[String]) = <msg text={t orNull} />

如果属性值为 null - 它不会被添加到元素中。

更新

更好!如果您要添加此隐式转换:

import xml.Text
implicit def optStrToOptText(opt: Option[String]) = opt map Text

你可以像这样使用t:

def makeMsg(t: Option[String]) = <msg text={t} />

这里是 REPL session :

scala> import xml.Text
import xml.Text

scala> implicit def optStrToOptText(opt: Option[String]) = opt map Text
optStrToOptText: (opt: Option[String])Option[scala.xml.Text]

scala> def makeMsg(t: Option[String]) = <msg text={t} />
makeMsg: (t: Option[String])scala.xml.Elem

scala> makeMsg(Some("hello"))
res1: scala.xml.Elem = <msg text="hello"></msg>

scala> makeMsg(None)
res2: scala.xml.Elem = <msg ></msg>

这是有效的,因为 scala.xml.UnprefixedAttribute 具有接受 Option[Seq[Node]] 作为值的构造函数。

关于xml - 如何根据选项添加或不添加 XML 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4777971/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com