我认为这个问题可能没有令人满意的答案,但无论如何我都会问它,以防我错过了什么.
基本上,我想在给定元素实例的情况下找出源文档中源自某个XML元素的行.我希望这只是为了更好的诊断错误消息 - XML是配置文件的一部分,如果它有问题,我希望能够将错误消息的读者指向XML文档中的正确位置所以他可以纠正错误.
我知道标准的Scala XML支持可能没有这样的内置功能.毕竟,NodeSeq用这样的信息注释每个单独的实例是浪费的,并不是每个XML元素都有一个源文档,从中解析它.在我看来,标准的Scala XML解析器抛出了行信息,后来无法检索它.
但是切换到另一个XML框架不是一种选择.为了更好的诊断错误消息而"仅"添加另一个库依赖项对我来说似乎不合适.此外,尽管有一些缺点,我真的很喜欢XML的内置模式匹配支持.
我唯一的希望是,您可以向我展示一种方法来更改或子类化标准Scala XML解析器,以便它生成的节点将使用源行的编号进行注释.也许NodeSeq可以为此创建一个特殊的子类.或者也许只能Atom进行子类化,因为NodeSeq它太动态了?我不知道.
无论如何,我的希望接近于零.我不认为解析器中有一个位置可以挂钩以更改节点的创建方式,并且在该位置可以获得行信息.不过,我想知道为什么我之前没有找到这个问题.如果这是重复的,请指出原件.
以下错误消息是什么意思?
如果没有被第二个成员覆盖的第三个成员,则不能覆盖具体成员(此规则旨在防止"意外覆盖");
我试图做可堆叠的特性修改.这是事后的一点点,因为我已经有了一个层次结构,我正在尝试修改行为,而不必重写大量的代码.
我有一个名为AbstractProcessor的基类,它定义了一个类似这样的抽象方法:
abstract class AbstractProcessor {
def onPush(i:Info): Unit
}
Run Code Online (Sandbox Code Playgroud)
我有几个现有的特征,以实现不同的onPush行为.
trait Pass1 {
def onPush(i:Info): Unit = { /* stuff */ }
}
trait Pass2 {
def onPush(i:Info): Unit = { /* stuff */ }
}
Run Code Online (Sandbox Code Playgroud)
所以这允许我使用new AbstractProcessor with Pass1或new AbstractProcessor with Pass2.
现在我想在Pass1和Pass2中的onPush调用之前和之后进行一些处理,同时最小化对AbstractProcessor和Pass1和Pass2的代码更改.我想创建一个像这样的特性:
trait Custom extends AbstractProcessor {
abstract override def onPush(i:Info): Unit = {
// do stuff before
super.onPush(i)
// do stuff after
}
}
Run Code Online (Sandbox Code Playgroud)
并使用它,new AbstractProcessor with Pass1 with …
我是最后一年的计算机科学本科生.作为我的最后一年项目,我正在考虑创建一个类似matlab的数值计算环境作为SAAS,支持矩阵操作,绘制函数和数据,图像处理操作等.该项目将在Java + Scala中创建.Scala将用于应用程序的DSL.其余的应用程序将用Java编程.
我正在考虑在谷歌应用引擎上实现这个系统,这样我们就可以在多个服务器上并行化各种算法,从而获得更快的结果.但是,我没有任何Web开发经验(除了PHP中的一些简单站点).
所以我有以下几个关键问题:
我知道这个问题非常主观,但我仍然要求你们不要关闭它,因为我对我的项目非常困惑,需要一些专家建议.
任何肝脏将非常感谢!
谢谢!
我正在玩Scalas的新宏,并从akshaal中找到了这个要点.因为它接缝我不太明白.给出以下特征(fieldsMacro或多或少与akshaal示例相同)
case class Field[I <: AnyRef](name: String, get: I => Any)
type Fields[I <: AnyRef] = List[Field[I]]
trait FieldAccess {
import FieldMacors._
import Field._
import language.experimental.macros
def fields[T <: AnyRef]: Fields[T] = macro fieldsMacro[T]
def field[T <: AnyRef](name: String): Fields[T] = fields[T].headOption <-- does not work!
^
}
object FieldMacors {
import language.experimental.macros
import Field._
def fields[T <: AnyRef]: Fields[T] = macro fieldsMacro[T]
/**
* Get a list of fiels
*/
def fieldsMacro[T <: AnyRef: c.TypeTag](c: …Run Code Online (Sandbox Code Playgroud) 我希望能够使用jEdit编写,编译和测试用Scala编写的项目.如何配置它呢?
在回答之前关于如何使用Swing实现某种效果的问题时,我被引导到JDesktopPane和JInternalFrame.不幸的是,scala.swing似乎没有任何一个类的包装器,所以我留下来扩展它.
我需要知道和做些什么才能为这些类创建最低限度可用的包装器,与scala.swing一起使用,以及制作大多数这些类的附加步骤是什么?
编辑:
正如某人所建议的,让我解释一下我打算实现的效果.我的程序控制(个人)彩票投注.所以我有很多不同的门票,每张门票可以有不同的赌注和不同的有效性.
这个想法是在一个单独的"空间"中显示每个票证,JInternalFrames似乎正是我想要的,让人们创建新票证,从文件加载它们,将它们保存到文件,以及通常检查或编辑信息每个.
除此之外,还需要有一个空间来显示彩票结果,我打算进一步发展该计划,以便能够控制集体投注 - 谁贡献了多少,以及如何分配任何获胜.我还没有考虑过这个界面.
请注意:
我不能"只使用"Java类,仍然可以充分利用Scala swing功能.上一个问题的答案已经告诉我如何用Java类做我想做的事情,这不是我在这里要求的.
阅读现有scala.swing类的源代码以了解如何做到这一点是我试图通过这个问题避免的工作.
对于以下功能:
def reverse[T](a: Array[T]): Array[T] = {
val b = new Array[T](a.length)
for (i <- 0 until a.length)
b(i) = a(a.length -i - 1)
b
}
Run Code Online (Sandbox Code Playgroud)
我从第2行得到"错误:无法找到元素类型T的类清单".
反正有没有解决这个问题?
我有一个Scala元组列表,如下所示:
val l = List((1,2),(2,3),(3,4))
Run Code Online (Sandbox Code Playgroud)
我希望将它映射到Int列表中,其中每个项目是相应元组中Ints的总和.我也不想使用x._1表示法,所以我用这样的模式匹配解决了问题
def addTuple(t: (Int, Int)) : Int = t match {
case (first, second) => first + second
}
var r = l map addTuple
Run Code Online (Sandbox Code Playgroud)
这样做我按预期获得了列表r:List [Int] = List(3,5,7).在这一点上,几乎是偶然的,我发现我可以使用如下的缩写形式获得相同的结果:
val r = l map {case(first, second) => first + second}
Run Code Online (Sandbox Code Playgroud)
我在我的文档中找不到对此语法的任何引用.这是正常的吗?我错过了一些微不足道的事情吗?
看到标志时,我正在寻找使非穷举匹配成为Scala中的编译错误的方法-Xlint:unsound-match。但是,我找不到很多信息,发现的一个示例在带有和不带有标志的情况下均相同,因此我真的不知道何时会有所帮助。有人可以解释它和/或提供一个在没有此标志的情况下在没有警告的情况下进行编译但会产生警告的匹配示例吗?
我正在将Gitorious与Gitlab进行比较,虽然我喜欢Gitlab有很多东西,但它有一个非常基本的问题.对于每个新存储库,创建者需要管理谁有权访问该存储库.
我们的模型非常简单:如果您可以访问gitlab,则可以访问大多数存储库.只有少数存储库会被关闭,我们甚至不需要在gitlab上使用它们.支持那个模型,但我还没有看到任何关于gitlab的方法.
可以吗?如果是这样,怎么样?