给定:
val m = Map[String, Int]("a" -> 1, "b" -> 2, "c" -> 3)
m.foreach((key: String, value: Int) => println(">>> key=" + key + ", value=" + value))
Run Code Online (Sandbox Code Playgroud)
为什么编译器会抱怨
error: type mismatch
found : (String, Int) => Unit
required: (String, Int) => ?
Run Code Online (Sandbox Code Playgroud) 我理解scala中的协方差和逆变.协方差在现实世界中有很多应用,但除了相同的函数旧例子之外,我无法想到任何逆变量应用.
有人可以了解现实世界的contravariance使用范例吗?
我有一个nodejs + mongodb应用程序连接如下:
var dbConfig = new mongo.Server(config.db.host, config.db.port, {auto_reconnect: true, poolSize: 20});
var db = new mongo.Db(config.db.name, dbConfig);
Run Code Online (Sandbox Code Playgroud)
在进行基准测试时(使用apache ab),发现当并发连接大于20时,它会挣扎(时间> = 1秒)(即使2个或更多并发连接似乎会线性增加时间):
[
{
"key": "mongoQuery1",
"min": 2,
"max": 598,
"mean": 387.60683760683764,
"sd": 134.56045668980255,
"variance": 18106.51650456823
},
{
"key": "mongoQuery2",
"min": 8,
"max": 149,
"mean": 73.14120370370358,
"sd": 25.141715811881994,
"variance": 632.1058739654371
},
...
]
Run Code Online (Sandbox Code Playgroud)
以上是我用于从节点应用程序捕获分析信息的分析服务器的输出.所以基本上,我已经把这样的东西分析应用程序:
var start = new Date().getTime();
db.collection('TheCollection', query, function(err, col) {
col.find(query).toArray(function(err, items) {
var elapsed = new Date().getTime() - start;
profiler.send('mongoQuery1', elapsed);
});
});
Run Code Online (Sandbox Code Playgroud)
请注意,集合大小最小(700条记录),并且集合都根据查询进行索引. …
我无法调整java logging的日志记录级别.我正在使用maven surefire(mvn test),并试图从默认的INFO调整为例如FINEST.
我在src/test/resources/logging.properties下有logging.properties文件
在编译之后,我在target/test-classes下看到,我看到一个带有预期配置的logging.properties文件:
java.util.logging.ConsoleHandler.level = FINEST
javax.enterprise.system.container.ejb.level = FINE
...
但是来自glassfish的控制台输出只有INFO/SEVERE级别的消息.
我哪里做错了?或者这是与maven屁股的另一个痛苦?
有没有更好的方法来确保资源得到正确发布 - 更好的方法来编写以下代码?
val out: Option[FileOutputStream] = try {
Option(new FileOutputStream(path))
} catch {
case _ => None
}
if (out.isDefined) {
try {
Iterator.continually(in.read).takeWhile(-1 != _).foreach(out.get.write)
} catch {
case e => println(e.getMessage)
} finally {
in.close
out.get.flush()
out.get.close()
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个支持多个用户的Web应用程序.每个用户都有自己的数据库 - 使用H2.所有数据库模式都是相同的.
我希望将Spring + Hibernate用于此应用程序.
所以我坚持如何将用户的数据库与该用户关联 - 可能在HTTPSession中关联它,并扩展spring的AbstractRoutingDataSource?但这不会影响Hibernate的缓存吗?另一种方法是使用每个数据源的SessionFactory,即使每个数据源的模式都相同......所以我认为这是一种浪费.
无论如何选择数据源都需要是动态的 - 它们不能在上下文文件中预先配置,因为每个新用户都将创建自己的数据库.有没有现有的框架/解决方案?
我不太了解Hibernate Shards,也许这有用吗?
鉴于此代码:
class Rational(n: Int, d: Int) {
require(d != 0)
private val g = gcd(n.abs, d.abs)
val numerator = n / g
val denominator = d / g
def this(n: Int) = this(n, 1)
override def toString = numerator + "/" + denominator
def +(r: Rational) = new Rational(numerator * r.denominator + r.numerator * denominator, denominator * r.denominator)
def *(r: Rational) = new Rational(numerator * r.numerator, denominator * r.denominator)
def +(i: Int) = new Rational(i) + this
private def gcd(a: …Run Code Online (Sandbox Code Playgroud) 我最近切换到intellij进行scala开发.
我找不到以下快捷方式:
在eclipse中,我可以输入方法调用,例如
method("hello", 1)
Run Code Online (Sandbox Code Playgroud)
并按下<command>1让eclipse弹出一个建议,让我创建一个方法存根.
intellij中有这样的捷径吗?
我是scala的新手,我只是编写一个简单的函数来反转给定的字符串:
def reverse(s: String) : String
for(i <- s.length - 1 to 0) yield s(i)
Run Code Online (Sandbox Code Playgroud)
yield返回一个scala.collection.immutable.IndexedSeq [Char],并且不能将它转换为String.(或者是别的什么?)
我该怎么写这个功能?
我有多个SBT项目都有一个共同的设置 - 例如多模块,publishTo设置等.
我如何提供一个常见的例如CommonBuild类,每个项目都可以从它扩展?例如:
trait CommonBuild {
val publishSettings = Seq(
publishTo := Some("", ""),
credentials += ...
)
def module(name: String) (
settings: Seq[Setting[_]],
projectId: String = PROJECT + "-" + name,
dirName: String = name,
srcPath: String = PROJECT + name
) = Project(projectId, file(dirName), settings = (buildSettings ++ srcPathSetting(projectId, srcPath)) ++ publishSettings ++ settings)
}
Run Code Online (Sandbox Code Playgroud)
现在它可以被项目构建使用:
object ProjABuild extends CommonBuild {
// use CommonBuild methods / vals
}
object ProjBBuild extends CommonBuild {
// use CommonBuild methods …Run Code Online (Sandbox Code Playgroud)