小编Rex*_*err的帖子

Scala的人类可读XML输出?

Scala似乎对你输入的XML做了两件事,这使得它不会变得易于解析,但却使其可读性降低:

首先,它扩展了自我关闭的标签:

scala> <tag/>
res109: scala.xml.Elem = <tag></tag>
Run Code Online (Sandbox Code Playgroud)

其次,它将属性加密为随机顺序,就像将它们放入哈希集中一样:

scala> <tag a="a" b="b" c="c" d="d"/>         
res110: scala.xml.Elem = <tag d="d" a="a" c="c" b="b"></tag>
Run Code Online (Sandbox Code Playgroud)

总之,这些共同导致XML的可读性大大降低(至少在我看来).我对XML库不是很熟悉; 有没有办法执行xml到字符串的转换,产生一个紧凑的人类可读形式?(如果不是默认情况下,通过递归和编写自己的字符串转换 - 或者是否有太多特殊情况潜伏在那里?)

xml scala

7
推荐指数
1
解决办法
613
查看次数

链接呼叫时省略点

我不明白为什么下面的代码不能编译:

class Abc 
{
    def b (x : String) = x + "abc"

    def a (y : String) =
    {
        val ls : List[String] = y.lines toList
        b (ls.head)
    }
}
Run Code Online (Sandbox Code Playgroud)

Main.scala:8:错误:类型不匹配; 发现:java.lang.String required:Int b(ls.head)

当我将"y.lines toList"更改为

y.lines.toList
Run Code Online (Sandbox Code Playgroud)

甚至到

y.lines toList;
Run Code Online (Sandbox Code Playgroud)

它确实编译.

也许编译器理解它就像

(y.lines).toList(b (ls.head))
Run Code Online (Sandbox Code Playgroud)

或类似的东西,但我仍然不明白规则.

syntax scala

6
推荐指数
1
解决办法
251
查看次数

有没有办法从JVM内部判断特定方法是否已被JIT编译?

在编写微基准测试时,可以观察到运行时的巨大差异,具体取决于方法是否已编译.有没有办法从程序中判断是否编译了特定方法?或者,是否有一种方法可以请求它,或者知道如何在没有任何额外信息(例如传递给JVM的标志)的情况下充分加热它?显然,这不一定是完美的(例如,可能存在一些导致JVM回退到解释代码的条件),但它肯定会有所改进.

java performance jit jvm microbenchmark

6
推荐指数
1
解决办法
175
查看次数

简化类型注释

我已经创建了一个pimp方法,collate可以从任何Traversable或任何可以被强制转换为可遍历的类型中使用,如下例所示:

val ints = List(0,9,4,5,-3,-5,6,5,-2,1,0,6,-3,-2)
val results = ints collate {
  case i: Int if(i < 0) => i.floatValue
} andThen {
  case i: Int if(i>5) => i.toString
} andThen {
  case i: Int if(i==0) => i
} toTuple

/*
results: (List[Float], List[java.lang.String], List[Int], List[Int]) =
(List(-3.0, -5.0, -2.0, -3.0, -2.0),List(9, 6, 6),List(0, 0),List(4, 5, 5, 1))
*/
Run Code Online (Sandbox Code Playgroud)

把它看成是一个工会"变成往返的邪恶产卵collectpartition,如果你会...

它的定义如下:

import collection.generic.CanBuildFrom

class Collatable[Repr <% Traversable[T], T](xs: Repr) {

  // Results handling …
Run Code Online (Sandbox Code Playgroud)

types scala

5
推荐指数
1
解决办法
532
查看次数

使用并行集合就地转换数组

当一个人拥有一个对象数组时,通常需要(例如出于性能原因)更新(替换)某些对象.例如,如果您有一个整数数组,则可能需要将正整数替换为正整数:

// Faster for primitives
var i = 0
while (i < a.length) {
  if (a(i) < 0) a(i) = -a(i)
  i += 1
}

// Fine for objects, often okay for primitives
for (i <- a.indices) if (a(i) < 0) a(i) = -a(i)
Run Code Online (Sandbox Code Playgroud)

使用并行集合库执行此类修改的规范方法是什么?

scala parallel-collections

5
推荐指数
1
解决办法
567
查看次数

合并scala列表中的元素

我正在尝试将以下Java代码段移植到Scala.它采用MyColor对象列表并合并彼此增量内的所有对象.这似乎是一个可以使用Scala的一些功能部分优雅地解决的问题.有小费吗?

List<MyColor> mergedColors = ...;
MyColor lastColor = null;
for(Color aColor : lotsOfColors) {
  if(lastColor != null) {
    if(lastColor.diff(aColor) < delta) {
      lastColor.merge(aColor);
      continue;
    }
  }
  lastColor = aColor;
  mergedColors.add(aColor);
}
Run Code Online (Sandbox Code Playgroud)

algorithm scala

4
推荐指数
1
解决办法
3396
查看次数

什么`>:`在Scala中意味着什么?

做了一些搜索没有成功找到的是什么>:.那么,让它伴随剩下的"Scala中的意思是什么......"这里的问题:-)

scala

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

如何在Scala中的匹配大小写语句中使用Map值

我有这样的地图:

val mealIdsMap: Map[String, String]    =
Map (
      "breakfast"     ->    "omelet",
      "lunch"         ->    "steak",
      "dinner"        ->    "salad"
)
Run Code Online (Sandbox Code Playgroud)

然后我尝试在匹配语句中使用它,如下所示:

"omelet" match 
{ 
  case mealIdsMap("breakfast") => "Thank God"
}
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

error: value mealIdsMap is not a case class constructor,
nor does it have an unapply/unapplySeq method
              case mealIdsMap("breakfast") => "Thank God"
Run Code Online (Sandbox Code Playgroud)

任何人都知道如何在匹配/案例陈述中使用这样的地图?

非常感谢你的帮助.

scala

2
推荐指数
1
解决办法
5517
查看次数

为什么我不能将Nothing分配给Unit类型的变量?

如果Nothing是一个子类AnyVal,包括Unit,那么为什么我不能分配Nothingoh

import scala.Nothing
val oh: Unit = Nothing
Run Code Online (Sandbox Code Playgroud)

scala

2
推荐指数
2
解决办法
412
查看次数

从Stack中取出第二个元素

我正在学习Scala.但是,在练习中,我遇到了Stack的一些问题.如何从堆栈中删除第二个元素.我必须删除第二个元素并放回顶部元素.

谢谢你的进步

stack scala

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

如何初始化一个val的trait变量

我有MyObject和MyTrait:

class MyObject(private val myname: String = "") extends MyTrait {

  _name = myname

  def foo(myname : String) {
   _name = myname
  }
}

trait MyTrait {

  protected var _name: String = _

  def name = _name

}
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作

val myObject = new MyObject("abc")
println(myObject.name)
myObject.foo("def")
println(myObject.name)
Run Code Online (Sandbox Code Playgroud)

版画

abc
def
Run Code Online (Sandbox Code Playgroud)

正如所料.

现在的问题是我希望MyTrait._name是val而不是var.但我无法设法将其编译.任何提示赞赏.

此致,奥利弗

scala accessor traits

0
推荐指数
1
解决办法
4504
查看次数