加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala中嵌入XML(和其他语言?)

发布时间:2020-12-16 18:59:34 所属栏目:安全 来源:网络整理
导读:我想知道如何实现 scala.xml库,以获取 XML中的Elem-instance. 所以我可以写: val xml = { myxml Some wired text withoud "'s or code like import x x.func() It's like a normal sting in triple-quotes. /myxml}xml.textString = " Some text wired with
我想知道如何实现 scala.xml库,以获取 XML中的Elem-instance.

所以我可以写:

val xml = {
  <myxml>
    Some wired text withoud "'s or code like
    import x
    x.func()
    It's like a normal sting in triple-quotes.
  </myxml>
}

xml.text

String = 
 "
    Some text wired withoud "'s or code like
    import x
    x.func()
    It's like a normal sting in triple-quotes.
  "

看源代码并没有给我洞察,怎么实现.
“XML检测”是(硬)Scala语言功能还是内部DSL?因为我想建立自己的这样的东西:

var x = LatexCode {
  sqrt{frac{a}{b}}
}

x.toString

"sqrt{frac{a}{b}}"

要么

var y = PythonCode {
  >>> import something
  >>> something.func()
}

y.toString
"""import something ..."""

y.execute  // e.g. passed to python as python-script

要么

object o extends PythonCode {
  import x
  x.y()
}

o.toString

"""import x...."""

我想避免使用像PythonCode {“”“import …”“”}之类的东西作为“DSL”.而在scala中,XML被神奇地传输到一个scala.xml-Class;与我可以用val a =’symoblname得到的符号相同,但是在源代码中没有线索如何实现.

我该怎么做,就像内部的DSL呢?

解决方法

XML是Scala语言功能(*) – 请参阅 SLS第1.5节.

我认为string interpolation将在2.10中进行,但是至少可以让您定义自己的DSL:

val someLatex = latex"""sqrt{frac{a}{b}}}"""

这是一个在SIP中更全面地解释的实验性功能,但是另外还有blogged about by the prolific Daniel Sobral.这点(当然),String中的代码的正确性可以在编译时检查(在一定程度上可以在一个无类型语言:-),您的IDE甚至可以帮助您编写它(也可以在一定程度上以无类型的语言编写:-()

(*) – 由于实施的许多缺点,我们可能会期望将来会发生变化.我的理解是,字符串插值和反xml的组合可能是一个真正的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读