就像是
def option[T](v: T): Option[T] = if (v == null) None else Some(v)
Run Code Online (Sandbox Code Playgroud)
我非常高兴自己定义这个实用程序方法,但只是想知道它是否已经存在于某个地方.
我知道类型擦除使它们在运行时看起来相同,类型,所以:
class Bar {
def foo[A](xs: A*) { xs.foreach(println) }
def foo[A, B](xs: (A, B)*) { xs.foreach(x => println(x._1 + " - " + x._2)) }
}
Run Code Online (Sandbox Code Playgroud)
给出以下编译器错误:
<console>:7: error: double definition:
method foo:[A,B](xs: (A, B)*)Unit and
method foo:[A](xs: A*)Unit at line 6
have same type after erasure: (xs: Seq)Unit
def foo[A,B](xs: (A, B)*) { xs.foreach(x => println(x._1 + " - " + x._2)
) }
^
Run Code Online (Sandbox Code Playgroud)
但是有一种简单的方法可以写:
bar.foo(1, 2, 3)
bar.foo(1 -> 2, 3 -> 4)
Run Code Online (Sandbox Code Playgroud)
并让这些调用foo的不同重载版本,而不必明确命名它们:
bar.fooInts(1, 2, …Run Code Online (Sandbox Code Playgroud) 注意:我正在提出这个问题来自己回答,但欢迎其他答案.
请考虑以下简单方法:
def add[T](x: T, y: T)(implicit num: Numeric[T]) = num.plus(x,y)
Run Code Online (Sandbox Code Playgroud)
我可以使用如下的上下文绑定重写它
def add[T: Numeric](x: T, y: T) = ??.plus(x,y)
Run Code Online (Sandbox Code Playgroud)
但是如何获取该Numeric[T]类型的实例以便我可以调用该plus方法?
我正在研究Scala和XML之间的编组/解组数据的各种方法,我有兴趣获得社区反馈(最好以第一手知识/经验为基础).
我们目前正在使用JAXB,这很好,但我希望有一个纯Scala解决方案.我正在考虑以下方法:
使用Scala的内置XML工具:Scala-> XML会很简单,但我的猜测是另一个方向会相当痛苦.另一方面,这种方法支持任意翻译逻辑.
数据绑定:scalaxb目前似乎有些不成熟,并且不处理我们当前的模式,我不知道Scala的任何其他数据绑定库.与JAXB一样,需要额外的转换层来支持相关的转换.
XML pickler组合器:GData Scala Client库提供XML pickler组合器,但是最近的项目活动一直很少,我不知道当前状态是什么.
问题:
编辑:
我在自己对这个问题的回答中添加了关于我对pickler组合器的早期印象的一些注释,但我仍然对那些真正了解各种方法的人的反馈非常感兴趣.我希望的是一个有点全面的比较,可以帮助开发人员选择适合他们需求的方法.
是否可以使用GWT或Vaadin实现Play Framework 2.x Web应用程序的客户端?
Play 1.x有一个提供GWT集成的特殊模块,但我找不到在Play 2.x版本中一起使用这些技术的示例.这些技术可以整合吗?是否有模块,或者是否必须使用其他方法?
为什么Scaladoc中的一些方法描述开始于[use case]?
例: scala.collection.immutable.StringOps.++
它只是一个将来被替换的占位符吗?
我正在开发一个由几个Eclipse插件组成的Eclipse功能,使用Equinox声明性服务(DS)在运行时将插件连接在一起.我想添加集成测试来验证equinox配置.
特别是,我想验证一下
此外,我想使用Eclipse PDE无头构建(如此处和此处所述)将此集成测试作为我的持续集成过程的一部分.
我的问题是:您能否推荐任何框架,工具或实践,以便在我确定的约束条件下促进此类集成测试?
到目前为止我找到了两个线索:
编辑:为了澄清,每个插件都有一个配置了组件定义xml文件的OSGi服务组件.其中一个配置文件中的错误不会破坏任何插件依赖性,并且很容易在运行时被忽视.必须进行集成测试才能检测到此类故障.
编辑2:到目前为止,我所看到的每件事似乎都证实了Uri的断言(见下文),多插件Eclipse功能未在功能/产品级别进行集成测试.如果我能至少自动验证服务组件是否正确绑定在一起,我愿意不进行全面的集成测试.
我的方法(还没有工作):
In a JUnit test do
For each bundle/plugin of interest
Get the osgi Bundle object with org.eclipse.core.runtime.Platform.getBundle()
Verify that the Bundle is active with Bundle.getState()
Verify that the Bundle is using the expected services with Bundle.getServicesInUse()
Verify that the Bundle has registered the expected services with Bundle.getRegisteredServices()
我正在使用Eclipse Plug-in …
谁能解释下面的编译错误?有趣的是,如果我将方法的返回类型更改get()为String,则代码编译得很好.请注意,该thenReturn方法有两个重载:一元方法和一个至少需要一个参数的varargs方法.在我看来,如果调用在这里是模棱两可的,那么它总是模棱两可的.
更重要的是,有什么方法可以解决歧义吗?
import org.scalatest.mock.MockitoSugar
import org.mockito.Mockito._
trait Thing {
def get(): java.lang.Object
}
new MockitoSugar {
val t = mock[Thing]
when(t.get()).thenReturn("a")
}
Run Code Online (Sandbox Code Playgroud)
错误:对重载定义的模糊引用,两个方法然后返回特征类型
java.lang.Object,java.lang.Object*)org.mockito.stubbing.OngoingStubbing [java.lang.Object]和方法返回特征OngoingStubbing的特征OngoingStubbing type(java.lang.Object)org.mockito.stubbing.OngoingStubbing [java.lang.Object]匹配参数类型(java.lang.String)when(t.get()).thenReturn("a")
Scala库是否为将给定类型的方法提升为函数值提供了任何支持?
例如,假设我想举起String.length.我可以写
val f: String => Int = _.length
Run Code Online (Sandbox Code Playgroud)
要么
val f = { s: String => s.length }
Run Code Online (Sandbox Code Playgroud)
但是,这种语法并不总是理想的(特别是在较大的表达式中).我想我正在寻找能够实现表达式的东西
Lift[String](_.length)
Lift[Option[Int]].lift(_.filter)
Run Code Online (Sandbox Code Playgroud)
我记得这样的事情:
class Lift[T] {
def apply[R](f: T => R): T => R = f
def lift[A, R](f: (T) => (A) => R): (T, A) => R =
f(_)(_)
def lift[A1, A2, R](f: (T) => (A1, A2) => R): (T, A1, A2) => R =
f(_)(_,_)
// ... etc. ...
}
object Lift {
def apply[T] = …Run Code Online (Sandbox Code Playgroud) 我试图在社交网络的帖子之间得分相似,但没有找到任何好的算法,思想?
我刚刚尝试过Levenshtein,JaroWinkler和其他人,但是那些人更习惯于比较没有情感的文本.在帖子中我们可以得到一个文字说"我真的喜欢狗"和另一个说"我真的很喜欢狗",我们需要将这个案例归类为完全不同.
谢谢
scala ×7
eclipse ×1
eclipse-pde ×1
gwt ×1
java ×1
marshalling ×1
mining ×1
nlp ×1
osgi ×1
overloading ×1
scaladoc ×1
text ×1
type-erasure ×1
typeclass ×1
vaadin ×1
xml ×1