考虑以下代码:
val foo = if(true)
new java.lang.Double(4)
else
new java.lang.Integer(4)
Run Code Online (Sandbox Code Playgroud)
推断类型foo是:
Number with Comparable[_ >: Double with Integer <: Number with
Comparable[_ >: Double with Integer <: Number]]
Run Code Online (Sandbox Code Playgroud)
所以基本上编译器在第三次递归后在边界和中止上循环.
以下为什么不够?
Number with Comparable[_ >: Double with Integer <: Number]
Run Code Online (Sandbox Code Playgroud) 目前,Scala仅在JVM上运行,并且CLR的实现过时.
但目前有一些声音,微软有兴趣为.NET提供最新的Scala端口.
考虑到Oracle方面缺乏任何计划或监督如何处理Java/JVM /生态系统,Scala开发人员如何做好准备,最终可能没有合适的平台来运行Scala?
是否有计划在未来对Scala VM进行一些"独立"实现,将Scala的功能映射到某些字节码/ VM,而不是必须在当前VM实现中使用所有这些遗留错误(没有泛型,协变数组,奇怪的注释,没有尾调用等)?
默认情况下是否安全,例如Java的单元素枚举模式,或者是否需要在readResolve某处定义或类似的方法来防止单一合同的意外或恶意破坏?
我在使用JPA2和EclipseLink编写数据库应用程序的测试时遇到了问题:
我将一些实体添加到数据库中,稍后检索它并希望将其与具有我期望确认添加按预期工作的值的实例进行比较.
首先我写了类似的东西
assertEquals(expResult, dbResult);
Run Code Online (Sandbox Code Playgroud)
失败了,因为我真的不知道id数据库生成的字段的值,因此dbResult不同于expResult我创建new和手动填充的字段.
我看到两个选择:
要么我id从中移除字段equals,hashCode以便比较仅基于"实际值".不过,我不知道这是否会导致数据库或其他地方出现问题.
或者我编写测试以明确检查除id手动之外的每个字段.
我该怎么办?
考虑这个课程:
case class Person(val firstName: String, val lastName: String, age: Int)
val persons = Person("Jane", "Doe", 42) :: Person("John", "Doe", 45) ::
Person("Joe", "Doe", 43) :: Person("Doug", "Don", 65) ::
Person("Darius", "Don", 24) :: Person("Dora", "Don", 20) ::
Person("Dane", "Dons", 29) :: Nil
Run Code Online (Sandbox Code Playgroud)
为了得到所有人的年龄总和,我可以编写如下代码:
persons.foldLeft(0)(_ + _.age)
Run Code Online (Sandbox Code Playgroud)
但是如果我想使用sum,我需要先映射该值,代码如下所示:
persons.map(_.age).sum
Run Code Online (Sandbox Code Playgroud)
如何在不创建某些中间集合的情况下使用该sum方法?
(我知道这样的"优化"很可能在没有在紧密循环中运行时没有任何真正的性能差异,而且我也知道懒惰的视图等等.)
是否有可能像这样的代码
persons.sum(_.age)
Run Code Online (Sandbox Code Playgroud)
做什么foldLeft/ 做什么reduceLeft?
考虑以下代码:
abstract class Foo(val s: String) {
def this(i: Int) = this("" + (i+2))
}
Run Code Online (Sandbox Code Playgroud)
据我所知,构造函数不是继承的,并且不能使用super类似Java的子类调用辅助构造函数.
它们只是一个无用的工件还是有一些合理的用例?
有了这段代码:
trait B[T]
trait C[T]
class A[T] extends B[A[C[T]]]
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
error: class graph is not finitary because type parameter T is expansively recursive
class A[T] extends B[A[C[T]]]
^
Run Code Online (Sandbox Code Playgroud)
有人可以解释错误消息的内容,为什么T无限递归以及为什么以下代码有效?
class A[T] extends B[A[T]]
Run Code Online (Sandbox Code Playgroud) compiler-construction inheritance types scala language-design
我最近将一些代码从java转换为scala,试图自学语言.
假设我们有这个scala类:
class Person() {
var name:String = "joebob"
}
Run Code Online (Sandbox Code Playgroud)
现在我想从java访问它,所以我不能像我在scala那样使用点符号.
所以我可以通过发出以下内容来获取我的var的内容:
person = Person.new();
System.out.println(person.name());
Run Code Online (Sandbox Code Playgroud)
并通过以下方式设置:
person = Person.new();
person.name_$eq("sallysue");
System.out.println(person.name());
Run Code Online (Sandbox Code Playgroud)
这是正确的,因为我们的Person类在javap中看起来像这样:
Compiled from "Person.scala"
public class Person extends java.lang.Object implements scala.ScalaObject{
public Person();
public void name_$eq(java.lang.String);
public java.lang.String name();
}
Run Code Online (Sandbox Code Playgroud)
是的,我可以编写自己的getter/setter但是我讨厌用这个来填充类,考虑到我已经拥有它们并没有多大意义 - 我只想更好地为_ $ eq方法添加别名.(当你处理像antlr这样的东西时,这实际上会变得更糟,因为那时你必须逃避它,它最终看起来像person.name _\$ eq("newname");
注意:我宁愿忍受这个,而不是用更多的setter方法填充我的类.
那么在这种情况下你会做什么?
考虑到这一点
还有另一条出路吗?
如果我想在JVM上进行GUI开发
是否有可用的第三种选择或未来可能有一种选择?
一个选项
这是现实的吗?
谢谢!
=========
澄清:如果我必须在JVM上启动一个新的软件项目,有几个现有的选项,如使用SWT或Swing,使用Swing与第三方库,如SwingX,JIDE,JGoodies,Flamingo或使用Netbeans Platform等应用程序框架或Eclipse RCP.是否有支持/建议的方法可以减轻通常与Java GUI开发相关的痛苦?
SIQ的当前状态是呈现在由克里斯托弗·沃格特2011 ScalaDays.它显示的查询是如何工作的,看起来像,但据我记得有没有关于这些类型将如何来表示,例如,如果它仍然需要编写样板代码来解释数据库结构Scala的概念.
F#3.0增加键入提供商(PDC谈话由Don赛姆:视频 ; GOTO哥本哈根谈话由Tomas Petricek:视频,幻灯片,博客文章),这使得它基本上不需要手动编写或生成(另一数据提供者或)一个DB之间的映射和语言/类型系统,因为语言可以直接使用类型提供程序从数据库本身查询结构信息.
ScalaIntegratedQuery是否能够向Scala编译器提供数据库的类型/关系,而无需用户自己编写样板代码?
scala ×8
java ×5
types ×2
.net ×1
api ×1
collections ×1
constructor ×1
database ×1
eclipselink ×1
equals ×1
f# ×1
generics ×1
inheritance ×1
javap ×1
jpa ×1
jvm ×1
llvm ×1
mapreduce ×1
persistence ×1
scalac ×1
scalaquery ×1
setter ×1
singleton ×1
sum ×1
swing ×1
swt ×1