假设这KeyAdapter是一个抽象类,有几个可以覆盖的方法.
在java中我可以做到:
KeyListener keyListener = new KeyAdapter() {
@Override public void keyPressed(KeyEvent keyEvent) {
// ...
}
};
Run Code Online (Sandbox Code Playgroud)
如何在Kotlin做同样的事情?
在我的基于ReactJS的应用程序中,我做了:
var _ = React.DOM;
_.span(null, 'some text', _.select(null, ...));
Run Code Online (Sandbox Code Playgroud)
问题是:'some text'包含在DOM中的其他span元素中.有没有办法避免这种行为,只输出原始文本?
要明确:我想输出
<span>some text<select>...</select></span>
Run Code Online (Sandbox Code Playgroud)
不
<span><span>some text</span><select>...</select></span>
Run Code Online (Sandbox Code Playgroud) 从IntelliJ IDEA运行命令行Java应用程序时,是否可以将EOF符号发送到等待输入的程序?在控制台中,这可以使用ctrl-d组合完成,但在IDEA中它不起作用.
最近在Strange Loop的演讲中,Martin Odersky阐述了他对Scala未来版本Dotty的看法.我知道这是正在进行中的工作,由于许多可能的向后兼容性问题,它甚至可能不会流入Scala(至少不会非常快).但如果它发生了,我们今天如何在Scala中编程以与Dotty向前兼容?我没有从谈话中得到所有想法,所以我希望有更深刻的人总结这些变化,并描述我们如何为他们做好准备.
我有一个Akka Streams Source,我希望根据谓词分成两个来源.
例如有一个源(有意简化类型):
val source: Source[Either[Throwable, String], NotUsed] = ???
Run Code Online (Sandbox Code Playgroud)
还有两种方法:
def handleSuccess(source: Source[String, NotUsed]): Future[Unit] = ???
def handleFailure(source: Source[Throwable, NotUsed]): Future[Unit] = ???
Run Code Online (Sandbox Code Playgroud)
我希望能够将source根据_.isRight谓词拆分并将正确的部分传递给handleSuccess方法并将部分传递给handleFailure方法.
我尝试使用Broadcast分离器,但最后需要Sinks.
通常我使用这组选项来编译Scala代码:
scalacOptions ++= Seq(
"-deprecation",
"-encoding", "UTF-8",
"-feature",
"-unchecked",
"-language:higherKinds",
"-language:implicitConversions",
"-Xfatal-warnings",
"-Xlint",
"-Yinline-warnings",
"-Yno-adapted-args",
"-Ywarn-dead-code",
"-Ywarn-numeric-widen",
"-Ywarn-value-discard",
"-Xfuture",
"-Ywarn-unused-import"
)
Run Code Online (Sandbox Code Playgroud)
但他们中的一些不ScalaTest玩好,所以我想禁用-Ywarn-dead-code和-Ywarn-value-discard编译测试时.
我尝试添加这样的范围
scalacOptions in Compile ++= Seq(...)
Run Code Online (Sandbox Code Playgroud)
要么
scalacOptions in (Compile, compile) ++= Seq(...)
Run Code Online (Sandbox Code Playgroud)
甚至
val ignoredInTestScalacOptions = Set(
"-Ywarn-dead-code",
"-Ywarn-value-discard"
)
scalacOptions in Test ~= { defaultOptions =>
defaultOptions filterNot ignoredInTestScalacOptions
}
Run Code Online (Sandbox Code Playgroud)
但前两个禁用正常编译范围的选项,而后者不影响测试编译选项.
编译测试时如何才能有单独的选项列表?
我需要将一系列cats.data.ValidatedNel[E, T]值展平为单个ValidatedNel值:
val results: Seq[cats.data.ValidatedNel[E, T]] = ???
val flattenedResult: cats.data.ValidatedNel[E, T]
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
import cats.std.list._, cats.syntax.cartesian._
results.reduce(_ |@| _ map { case _ => validatedValue })
Run Code Online (Sandbox Code Playgroud)
但是想知道是否存在预定义的库方法.
我需要akka.stream.scaladsl.Source[T, Unit]从一个集合中创建一个Future[T].
例如,有一组期货返回整数,
val f1: Future[Int] = ???
val f2: Future[Int] = ???
val fN: Future[Int] = ???
val futures = List(f1, f2, fN)
Run Code Online (Sandbox Code Playgroud)
如何创建一个
val source: Source[Int, Unit] = ???
Run Code Online (Sandbox Code Playgroud)
从中.
我不能使用Future.sequence组合器,从那以后我会等待每个未来完成之后从源头获取任何东西.我想在任何未来完成后立即以任何顺序获得结果.
我知道这Source是一个纯粹的功能API,它不应该以某种方式实现它之前运行任何东西.所以,我的想法是使用Iterator(懒惰)来创建一个源:
Source { () =>
new Iterator[Future[Int]] {
override def hasNext: Boolean = ???
override def next(): Future[Int] = ???
}
}
Run Code Online (Sandbox Code Playgroud)
但这将是未来的来源,而不是实际价值.我也可以阻止next使用,Await.result(future)但我不确定哪个胎面池的线程将被阻止.这也将顺序调用期货,而我需要并行执行.
更新2:事实证明有一种更简单的方法(感谢Viktor Klang):
Source(futures).mapAsync(1)(identity)
Run Code Online (Sandbox Code Playgroud)
更新:这是基于@sschaef回答我得到的:
def futuresToSource[T](futures: …Run Code Online (Sandbox Code Playgroud) 使用AngularJS拦截器,是否可以将我的应用程序调用区分为$ http(直接通过$ resource)与Angular本身针对静态资源(如视图)发出的请求,而不检查URL?
我在HTTP拦截器中添加自定义授权标头,如下所示:
transparentAuthServices.factory('authHttpInterceptor',
function (localSessionStorage) {
return {
'request': function (config) {
if (!config.ignoreAuthInterceptor && localSessionStorage.hasSession()) {
var sessionId = localSessionStorage.getSession().sessionId;
config.headers['Authorization'] = 'ARTAuth sessionId="' + sessionId + '"';
return config;
} else {
return config;
}
}
}
};
});
Run Code Online (Sandbox Code Playgroud)
它工作正常,但我不需要授权静态资源,我的服务器不检查它们.我可以查看网址并跳过那些以'/ app'开头的(在我的情况下),但我想知道是否有一个优雅的解决方案?
在我的场景中,客户端发送"再见"websocket消息,我需要在服务器端关闭先前建立的连接.
来自akka-http 文档:
通过从服务器逻辑中取消传入连接流(例如,将其下游连接到Sink.cancelled,将其上游连接到Source.empty),可以关闭连接.也可以通过取消IncomingConnection源连接来关闭服务器的套接字.
但是我不清楚如何考虑到这一点Sink并Source在协商新连接时设置一次:
(get & path("ws")) {
optionalHeaderValueByType[UpgradeToWebsocket]() {
case Some(upgrade) ?
val connectionId = UUID()
complete(upgrade.handleMessagesWithSinkSource(sink, source))
case None ?
reject(ExpectedWebsocketRequestRejection)
}
}
Run Code Online (Sandbox Code Playgroud) scala ×6
akka-stream ×3
javascript ×2
akka-http ×1
angularjs ×1
dotty ×1
eof ×1
future ×1
interceptor ×1
java ×1
kotlin ×1
reactjs ×1
sbt ×1
scala-cats ×1