小编Kim*_*bel的帖子

什么时候方法确实有副作用?

正如我一直所理解的那样,对程序状态的任何更改(或与IO有关的任何内容)都是副作用.无论是在全局变量中还是在调用该方法的对象的私有字段中发生更改都无关紧要.因此,所有不返回任何东西的方法都不做任何事情或产生副作用.
我的困惑来自我们的一位大学教师(他仍然是学生,因此还不是无所不知;))告诉我,安装者没有副作用.

language-agnostic oop side-effects definition

7
推荐指数
1
解决办法
2160
查看次数

Scala中的类型

有没有办法让方法总是返回调用它的同一个类的类型?

让我解释:

class Shape {
  var mName: String = null
  def named(name: String): Shape = {
    mName = name
    this
  }
}

class Rectangle extends Shape {
  override def named(name: String): Rectangle = {
    super.named(name)
    this
  }
}
Run Code Online (Sandbox Code Playgroud)

这是有效的,但有没有办法在不必覆盖named所有子类中的函数的情况下执行此操作?我正在寻找这样的东西(不起作用):

class Shape {
  var mName: String = null
  def named(name: String): classOf[this] = { // Does not work but would be great
    mName = name
    this
  }
}

class Rectangle extends Shape {
}
Run Code Online (Sandbox Code Playgroud)

任何的想法 ?还是不可能?

inheritance types scala

7
推荐指数
1
解决办法
1510
查看次数

自动创建单元测试(半)?

是否有支持从注释生成一些标准单元测试的框架?我想到的一个例子是:

@HasPublicDefaultConstructor
public class Foo {

}
Run Code Online (Sandbox Code Playgroud)

这显然会用于自动生成一个单元测试,用于检查Foo是否具有默认构造函数.我是唯一一个想到这样的人吗?虽然我对Java最感兴趣,但其他语言的解决方案肯定也很有趣.

编辑:回应S.Lott的回答,让我澄清一下:

我正在尝试测试该类是否具有默认构造函数.(当然这只是一个例子.)我可以通过编写测试来做到这一点,但我觉得这很乏味.所以我正在寻找一种工具,可以在编译时处理注释(通过APT)并为我生成测试.这样的事情存在吗?如果没有,你认为这是个好主意吗?

java automation unit-testing code-generation annotations

6
推荐指数
2
解决办法
1021
查看次数

具有快速前缀搜索的只读字符串列表(约100,000)的最有效数据结构

我正在编写一个应用程序,需要从文件中读取字符串列表,将它们保存在数据结构中,然后按前缀查找这些字符串.字符串列表只是给定语言中的单词列表.例如,如果搜索函数将"stup"作为参数,则应返回["stupid","stupidity","stupor"...].它应该在O(log(n)*m)时间内完成,其中n是数据结构的大小,m是结果的数量,应该尽可能快.内存消耗现在不是一个大问题.我在python中写这个,所以如果你能指出一个合适的数据结构(最好)用python包装器在c中实现它会很棒.

python lookup dictionary data-structures

6
推荐指数
1
解决办法
2844
查看次数

Scala匹配+范围的问题

给出以下代码:

case class ChangeSet(field:String, from:Object, to:Object)

private var changed:List[ChangeSet] = Nil

def change(field:String, from:Object, to:Object) {
  changed.find{ case ChangeSet(field,_,_) => true } match {
    case Some(ChangeSet(field,to,_)) => // do stuff
    case Some(_) => // do stuff
    case _ => // do stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

给我带来麻烦的是Some(ChangeSet(field,to,_)).

它编译但似乎正在发生的事情是Scala将其填充为通配符的占位符.我的假设基于以下事实:当我执行以下操作时,Some(ChangeSet(field,to,to))我得到了错误to is already defined as value.

我想要的是to从方法参数创建一个ChangeSet对象.

那可能吗?

scala pattern-matching

6
推荐指数
1
解决办法
979
查看次数

Scala模式匹配语法

我最近一直在玩scala模式匹配,并且想知道是否有一种方法可以在case语句中创建一个提取器.以下代码有效,但您必须先定义提取器并将其分配给val:

val Extr = "(.*)".r
"test" match {
  case Extr(str) => println(str)
}
Run Code Online (Sandbox Code Playgroud)

我想做什么,或者我希望有人确认是不可能的,是这样的:

"test" match {
  case ("(.*)".r)(str) => println(str)
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果scala团队的任何人正在阅读这个:实现这个是否可行?

syntax scala pattern-matching

6
推荐指数
1
解决办法
1141
查看次数

Scala的Emacs项目管理

我想问一下你是否有任何经验{和,或}可以指向我与Emacs的项目管理扩展,它与{Scala,Ensime,SBT}配合得很好.如果它不需要太多的黑客攻击也会令人惊讶.我过去做了一些计划,但我对Emacs平台没什么经验.

基本上,通过项目管理,我的意思主要是"将文件绑定到项目中"然后在它们之间进行搜索(并且仅在它们之间).

感谢您花时间阅读并回答!

emacs scala sbt ensime

6
推荐指数
1
解决办法
561
查看次数

宏,拼接和模式匹配

有没有办法在模式匹配中使用宏的参数?我想这样做:

def extr(X:AnyRef) = macro extrImpl

def extrImpl(c:Context)(X:c.Expr[AnyRef]):c.Expr[AnyRef] = {
  import c.universe._

  val tree = reify {
    new {
      def unapply(x:String):Option[String] = x match {
        case X.splice => Some(x) //error
        case _ => None
      }
    }
  }.tree
  c.Expr(c.typeCheck(tree))
}
Run Code Online (Sandbox Code Playgroud)

但不幸的是编译器说"需要稳定的标识符,但X.splice发现了".通常,人们可以通过首先分配val来解决这个问题,例如:

val XX = X.splice
Run Code Online (Sandbox Code Playgroud)

但当然,这也不适用于拼接.

macros scala pattern-matching scala-2.10 scala-macros

6
推荐指数
1
解决办法
754
查看次数

将Akka的未来[A]转换为未来[要么[例外,A]]

在Akka(或Scala 2.10中的标准库)中是否有一种方法可以将Future[A]可能失败的方法转换为Future[Either[Exception,A]]?我知道你可以写

f.map(Right(_)).recover {
  case e:Exception => Left(e)
}
Run Code Online (Sandbox Code Playgroud)

这似乎是一个如此常见的任务,我想知道我是否忽略了一些东西.我对Scala 2.9/Akka和Scala 2.10的答案很感兴趣.

scala future akka scala-2.9 scala-2.10

6
推荐指数
2
解决办法
3052
查看次数

如何在maven中使用Scala 2.9的夜间版本?

最近我想在一个小项目中尝试Scala 2.9中的一些新功能.我想用maven来构建它.我如何告诉Maven使用最新的每晚Scala 2.9版本?如果有人知道如何用sbt而不是maven来做这件事,那也会很好.

scala nightly-build maven sbt scala-2.9

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