Questions tagged «scala»

Scala是主要针对Java虚拟机的通用编程语言。它旨在以简洁,优雅和类型安全的方式表达常见的编程模式,它融合了命令式和功能性编程风格。它的主要特征是:具有类型推断功能的高级静态类型系统;功能类型;模式匹配; 隐式参数和转换;操作符重载;与Java完全互操作性;并发


3
Scala常数的命名约定?
Scala常数的命名约定是什么?简要搜索StackOverflow建议使用大写的CamelCase(下面的第一行),但是我想仔细检查一下。 val ThisIsAConstant = 1.23 val THIS_IS_ANOTHER_CONSTANT = 1.55 val thisIsAThirdConstant = 1.94 推荐哪种Scala样式?




9
无需使用具有长参数列表的构造函数即可构建大型的不可变对象
我有一些大对象(超过3个字段),它们可以并且应该是不变的。每次遇到这种情况时,我倾向于使用长参数列表创建构造函数可憎的对象。 感觉不对,很难使用,并且可读性受到影响。 如果字段是某种类型的集合类型(如列表),那就更糟了。一个简单的方法addSibling(S s)可以极大地简化对象的创建过程,但是使对象可变。 你们在这种情况下使用什么? 我使用的是Scala和Java,但我认为只要语言是面向对象的,问题就与语言无关。 我能想到的解决方案: “带有长参数列表的构造函数可憎” 建造者模式
96 java  oop  scala  immutability 

6
“抽象”是什么意思?
在Scala文献中,我经常遇到“抽象”一词,但我不明白其意图。 例如,马丁·奥德斯基(Martin Odersky)写道 您可以将方法(或“函数”)作为参数传递,也可以对其进行抽象。您可以将类型指定为参数,也可以对其进行抽象。 再举一个例子,在“弃用观察者模式”一文中, 事件流是一流值的结果是我们可以对其进行抽象。 我已经读过一阶泛型“抽象于类型”,而monads“抽象于类型构造函数”。在Cake Pattern纸上我们也看到了这样的短语。引用许多这样的例子之一: 抽象类型成员提供了一种灵活的方式来对组件的具体类型进行抽象。 甚至相关的堆栈溢出问题也使用此术语。 “不能在参数化类型上存在抽象……” 那么...“抽象”实际上是什么意思?

8
Scala中Null / Nothing / Unit的用法
我刚刚读过:http : //oldfashionedsoftware.com/2008/08/20/a-post-about-nothing/ 据我了解,Null是一个特征,唯一的实例是null。 当一个方法接受一个Null参数时,即使它为null ,我们也只能将其传递给Null引用或null直接传递给它,而不能传递任何其他引用nullString: String = null。 我只是想知道在哪些情况下使用此Null特征可能有用。还有Nothing特性,我没有再看到更多示例。 我真的不明白使用Nothing和Unit作为返回类型有什么区别,因为两者都不返回任何结果,例如,当我拥有执行日志记录的方法时,如何知道要使用哪个? 除返回类型外,是否还有单位/空/无其他用法?
95 scala 

1
键入Dynamic如何工作以及如何使用它?
我听说Dynamic可以在Scala中进行动态键入。但是我无法想象它的外观或工作方式。 我发现一个人可以继承特质 Dynamic class DynImpl extends Dynamic 该API说,人们可以这样使用它: foo.method(“ blah”)~~> foo.applyDynamic(“ method”)(“ blah”) 但是当我尝试它不起作用时: scala> (new DynImpl).method("blah") <console>:17: error: value applyDynamic is not a member of DynImpl error after rewriting to new DynImpl().<applyDynamic: error>("method") possible cause: maybe a wrong Dynamic method signature? (new DynImpl).method("blah") ^ 这是完全合乎逻辑的,因为在查看源代码之后,事实证明此特征完全是空的。没有applyDynamic定义方法,我无法想象如何自己实现。 有人可以告诉我要使它正常工作需要做什么吗?
95 scala 

18
Scala和Java代码示例,其中Scala代码看起来更简单/行更少?
我需要一些Scala和Java代码的代码示例(并且我也对此感到很好奇),这些示例表明Scala代码比用Java编写的代码更简单,简洁(当然,两个示例都应该解决相同的问题)。 如果只有带有注释的Scala示例,例如“这是Scala中的抽象工厂,在Java中看起来会很麻烦”,那么这也是可以接受的。 谢谢! 我最喜欢的所有接受和这个答案


5
三元运算符,类似于?:
我试图避免这样的构造: val result = this.getClass.getSimpleName if (result.endsWith("$")) result.init else result 好的,在此示例中,thenand else分支很简单,但是您可以对复杂的分支进行映像。我建立了以下内容: object TernaryOp { class Ternary[T](t: T) { def is[R](bte: BranchThenElse[T,R]) = if (bte.branch(t)) bte.then(t) else bte.elze(t) } class Branch[T](branch: T => Boolean) { def ?[R] (then: T => R) = new BranchThen(branch,then) } class BranchThen[T,R](val branch: T => …
94 scala 

3
在Scala中获取子数组的正确方法是什么?
我正在尝试在scala中获得一个子数组,而我对执行此操作的正确方式有些困惑。我最想要的是类似如何在python中完成的工作: x = [3, 2, 1] x[0:2] 但我相当确定您不能这样做。 最明显的方法是使用Java Arrays util库。 import java.util.Arrays val start = Array(1, 2, 3) Arrays.copyOfRange(start, 0, 2) 但这总是让我觉得在Scala中使用Java库有点脏。我发现最“ scalaic”的方式是 def main(args: List[String]) { val start = Array(1, 2, 3) arrayCopy(start, 0, 2) } def arrayCopy[A](arr: Array[A], start: Int, end: Int)(implicit manifest: Manifest[A]): Array[A] = { …



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.