对于数字密集型代码,我编写了一个具有以下签名的函数:
def update( f: (Int,Int,Double) => Double ): Unit = {...}
Run Code Online (Sandbox Code Playgroud)
但是,因为Function3不是专门的,所以每个应用程序都会f在装箱/取消装箱3个参数和结果类型.
我可以使用一个特殊的更新程序类:
trait Updater {
def apply( i: Int, j: Int, x: Double ): Double
}
def update( f: Updater ): Unit = {...}
Run Code Online (Sandbox Code Playgroud)
但调用很麻烦(和java-ish):
//with function
b.update( (i,j,_) => if( i==0 || j ==0 ) 1.0 else 0.5 )
//with updater
b.update( new Updater {
def apply( i: Int, j: Int, x: Double ) = if( i==0 || j ==0 ) 1.0 else 0.5 …Run Code Online (Sandbox Code Playgroud) 首先,我在关于这些方法的文档中发现了两篇有用的文章:
all?:将集合的每个元素传递给给定的块.如果块永远不返回false或nil,则该方法返回true.
any?:将集合的每个元素传递给给定的块.如果块返回false或nil以外的值,则该方法返回true.
但是在空数组和散列的情况下,我得到了:
irb(main):004:0> [nil, "car", "bus"].all?
=> false
irb(main):005:0> ["nil", "car", "bus"].all?
=> true
irb(main):006:0> [].all?
=> true
irb(main):007:0> ["nil", "car", "bus"].any?
=> true
irb(main):008:0> [nil, "car", "bus"].any?
=> true
irb(main):009:0> [nil].any?
=> false
irb(main):010:0> [].any?
=> false
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释为什么空数组给我false的any?方法和true情况下all??
我的项目发出以下警告:
[warn] Potentially incompatible versions of dependencies of {file:/some/path/}default-5bae4a:
[warn] org.scala-lang: 2.9.2, 2.9.1
Run Code Online (Sandbox Code Playgroud)
我有以下依赖项:
libraryDependencies ++= Seq(
"io.spray" % "spray-can" % "1.0-M3",
"io.spray" % "spray-routing" % "1.0-M3",
"io.spray" % "spray-testkit" % "1.0-M3",
"io.spray" %% "spray-json" % "1.2.3" cross CrossVersion.full,
"com.typesafe.akka" % "akka-actor" % "2.0.3",
"org.mongodb" %% "casbah" % "2.4.1",
"com.novus" %% "salat" % "1.9.1",
"org.specs2" %% "specs2" % "1.12.2" % "test",
"org.mockito" % "mockito-all" % "1.9.0" % "test"
)
Run Code Online (Sandbox Code Playgroud)
我试图弄清楚如何摆脱org.scala-lang 2.9.1依赖,但它并不像我想象的那么容易.我错过了什么伎俩?
哪些依赖类型的编程语言可用于实际应用程序开发?
这些是我认为重要的一些要点:
我的解释_._1是:
_= wildcard parameter
_1=方法参数列表中的第一个参数但是当.它与它表示什么一起使用时?
这是它的用法:
.toList.sortWith(_._1 < _._1)
Run Code Online (Sandbox Code Playgroud)
对于这个声明:
_++_
Run Code Online (Sandbox Code Playgroud)
我迷路了.是以某种方式连接两个通配符参数?这是它的用法:
.reduce(_++_)
Run Code Online (Sandbox Code Playgroud)
如果上面的代码可以变得更加冗长并删除任何含义,我会特别感兴趣,这样我才能更好地理解它?
我正在尝试执行以下代码:
def sum(e: { def *(x: Double): Double}) = e * 2.0
Run Code Online (Sandbox Code Playgroud)
问题是,这不适用于任何数字类:
sum(20.0)
<console>:9: error: type mismatch;
found : Double(10.0)
required: AnyRef{def *(x: Double): Double}
algo(10.0)
sum(10)
<console>:9: error: type mismatch;
found : Int(10)
required: AnyRef{def *(x: Double): Double}
algo(10)
Run Code Online (Sandbox Code Playgroud)
我的代码有问题吗?
我试图返回一个带有until循环的可变序列,但是我有一个不可变的seq返回(0到nbGenomes):
def generateRandomGenome(nbGenomes:Int): IndexedSeq[GenomeDouble]={
return ((0 until nbGenomes toSeq).map{e => generateRandomGenome})
}
Run Code Online (Sandbox Code Playgroud)
返回编译错误:
found : scala.collection.immutable.IndexedSeq[org.openmole.tools.mgo.mappedgenome.genomedouble.GenomeDouble]
required: scala.collection.mutable.IndexedSeq[org.openmole.tools.mgo.mappedgenome.genomedouble.GenomeDouble]
return ((0 until nbGenomes toSeq).map{e => generateRandomGenome})
Run Code Online (Sandbox Code Playgroud)
我如何强制until循环返回一个可变的seq?谢谢scala社区!
Java的一个几乎未知的特性是这种泛型语法:
public class Baz<T extends Foo & Bar> {}
Run Code Online (Sandbox Code Playgroud)
我想在Scala中做同样的事情,但我不知道怎么做,有人可以给我一个语法吗?
我以前:
class MongoObject[T <: CaseClass]
Run Code Online (Sandbox Code Playgroud)
现在我需要:
class MongoObject[T <: IdentifiableModel & CaseClass]
Run Code Online (Sandbox Code Playgroud)
或至少类似的东西
谢谢
任何人都可以想到一种方法来从两个字符串中创建一个唯一的哈希?确保的东西:
hash(string1,string2) = hash(string2,string1).
我总是可以在地图中的两个不同值下存储相同的引用,但我想:必须有更好的方法......
如何在Scala中为垂直制表符('\ v',ASCII 11)编写字符文字?
'\v'不起作用.(无效的转义字符)
'\11'应该是它,但是......
scala> '\11'.toInt
res13: Int = 9
Run Code Online (Sandbox Code Playgroud)
但9是普通标签('\ t')的ASCII码.那里发生了什么?
编辑:这工作并产生正确的字符,但我仍然想知道文字的语法.
val c:Char = 11
Run Code Online (Sandbox Code Playgroud)