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到字符串的转换,产生一个紧凑的人类可读形式?(如果不是默认情况下,通过递归和编写自己的字符串转换 - 或者是否有太多特殊情况潜伏在那里?)
我不明白为什么下面的代码不能编译:
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)
或类似的东西,但我仍然不明白规则.
在编写微基准测试时,可以观察到运行时的巨大差异,具体取决于方法是否已编译.有没有办法从程序中判断是否编译了特定方法?或者,是否有一种方法可以请求它,或者知道如何在没有任何额外信息(例如传递给JVM的标志)的情况下充分加热它?显然,这不一定是完美的(例如,可能存在一些导致JVM回退到解释代码的条件),但它肯定会有所改进.
我已经创建了一个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)
把它看成是一个工会"变成往返的邪恶产卵collect和partition,如果你会...
它的定义如下:
import collection.generic.CanBuildFrom
class Collatable[Repr <% Traversable[T], T](xs: Repr) {
// Results handling …Run Code Online (Sandbox Code Playgroud) 当一个人拥有一个对象数组时,通常需要(例如出于性能原因)更新(替换)某些对象.例如,如果您有一个整数数组,则可能需要将正整数替换为正整数:
// 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)
使用并行集合库执行此类修改的规范方法是什么?
我正在尝试将以下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) 做了一些搜索没有成功找到的是什么>:.那么,让它伴随剩下的"Scala中的意思是什么......"这里的问题:-)
我有这样的地图:
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)
任何人都知道如何在匹配/案例陈述中使用这样的地图?
非常感谢你的帮助.
如果Nothing是一个子类AnyVal,包括Unit,那么为什么我不能分配Nothing给oh?
import scala.Nothing
val oh: Unit = Nothing
Run Code Online (Sandbox Code Playgroud) 我正在学习Scala.但是,在练习中,我遇到了Stack的一些问题.如何从堆栈中删除第二个元素.我必须删除第二个元素并放回顶部元素.
谢谢你的进步
我有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.但我无法设法将其编译.任何提示赞赏.
此致,奥利弗