小编Don*_*zie的帖子

Scala中的私有和受保护的构造函数

我一直很好奇Scala中没有明确的主要构造函数的影响,只是类体的内容.

特别是,我怀疑私有或受保护的构造函数模式,即通过伴随对象或另一个类或对象的方法控制构造可能没有明显的实现.

我错了吗?如果是这样,它是如何完成的?

scala

107
推荐指数
2
解决办法
3万
查看次数

包对象

什么是包对象,而不是概念,但它们的用途?

我试图找一个工作的例子,我开始工作的唯一形式如下:

package object investigations {
    val PackageObjectVal = "A package object val"
}

package investigations {

    object PackageObjectTest {
        def main(args: Array[String]) {
            println("Referencing a package object val: " + PackageObjectVal)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我到目前为止所做的观察是:

package object _root_ { ... }
Run Code Online (Sandbox Code Playgroud)

是不允许的(这是合理的),

package object x.y { ... }
Run Code Online (Sandbox Code Playgroud)

也是不允许的.

似乎必须在直接父包中声明包对象,如果如上所述,则需要包含大括号的包声明表单.

它们是常用的吗?如果是这样,怎么样?

scala scala-2.8

89
推荐指数
4
解决办法
3万
查看次数

尝试阻止范围

我对try块中的变量作用域的规则不满意,而不是与关联的catch和finally块共享.具体来说,它会导致如下代码:

var v: VType = null

try {
  v = new VType()
}
catch {
  case e => // handle VType constructor failure (can reference v)
}
finally {
  // can reference v.
}
Run Code Online (Sandbox Code Playgroud)

相反:

try {
  val v = new VType()
}
catch {
  case e => // handle VType constructor failure (can reference v)
}
finally {
  // can reference v.
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释或证明为什么Java中的这个规则仍然存在?

和/或希望这会改变吗?

谢谢!

UPDATE

非常感谢迄今为止的所有回复.

这个共识似乎意味着"只是继续下去",我开始得出结论,或许在技术上我想要的是不健全,不值得努力或难以实现.

我喜欢Rex Kerr的答案,但是如果不在方法体中引入局部变量,上面的原始代码将如何包装在方法调用中?

我自己的努力并不太好,使用by-name参数来延迟构造,直到在try块中安全地工作,但仍然不允许我访问catch或finally块中的构造(或不)对象.

scope scala try-catch

18
推荐指数
3
解决办法
6162
查看次数

在scala 2.8中从String到Int的隐式转换

以下片段是否有问题: -

object Imp {
  implicit def string2Int(s: String): Int = s.toInt

  def f(i: Int) = i

  def main(args: Array[String]) {
    val n: Int = f("666")
  }
}
Run Code Online (Sandbox Code Playgroud)

我从2.8编译器中得到以下内容: -

信息:编译完成时出现1错误和0警告
信息:1错误
信息:0警告
...\scala-2.8-tests\src\Imp.scala
错误:错误:第(4)行错误:类型不匹配;
found:
需要字符串:?{val toInt:?}
请注意,隐式转换不适用,因为它们不明确:
对象Imp中的方法string2Int类型(s:String)Int
和对象Prementf中的方法augmentString类型(x:String) scala.collection.immutable.StringOps
是可能的转换函数从String到?{val toInt:?}
隐式def string2Int(s:String):Int = s.toInt

scala scala-2.8

14
推荐指数
2
解决办法
3万
查看次数

从Java属性获取Scala映射

我试图使用java Iterators和/或Enumerations将环境变量拉入scala脚本,并意识到Frankenstein博士可能会声称为parentage,所以我从丑陋的树中攻击了以下内容:

import java.util.Map.Entry
import System._

val propSet = getProperties().entrySet().toArray()
val props   = (0 until propSet.size).foldLeft(Map[String, String]()){(m, i) =>
  val e = propSet(i).asInstanceOf[Entry[String, String]]
  m + (e.getKey() -> e.getValue())
}
Run Code Online (Sandbox Code Playgroud)

例如,打印所述相同的环境

props.keySet.toList.sortWith(_ < _).foreach{k =>
  println(k+(" " * (30 - k.length))+" = "+props(k))
}
Run Code Online (Sandbox Code Playgroud)

拜托,请不要设置抛光这个t $ #d,只是告诉我scala gem,我确信这种情况存在(即java Properties - > scala.Map),在此先感谢; @)

collections scala map scala-java-interop

12
推荐指数
3
解决办法
1万
查看次数

你如何写一个惯用的Scala Quicksort函数?

我最近回答了一个问题,在斯卡拉写一个快速排序功能与尝试,我会看到类似下面的地方写的代码.

def qsort(l: List[Int]): List[Int] = {
  l match {
    case Nil         => Nil
    case pivot::tail => qsort(tail.filter(_ < pivot)) ::: pivot :: qsort(tail.filter(_ >= pivot))
  }
}
Run Code Online (Sandbox Code Playgroud)

我的回答得到了一些建设性的批评,指出List对于quicksort来说是一个糟糕的选择,其次是上面不是尾递归.

我尝试以尾递归的方式重写上面的内容,但没有太多运气.是否可以编写尾递归快速排序?或者,如果没有,如何以功能性的方式完成?还有什么可以做到最大化实施的效率?

scala

5
推荐指数
2
解决办法
3477
查看次数

IntelliJ IDEA,社区版或终极版?

从Scala的角度来看,使用IDEA的社区版本而不是Ultimate版本是否有任何优势.

我已经检查了所提供的版本比较图表,并不需要指定许多功能和集成.我会对提到的代码覆盖率支持感兴趣,但怀疑它是以Java为中心的.

licensing scala intellij-idea

5
推荐指数
1
解决办法
1219
查看次数