我有以下 Travis CI yml 文件片段:
script:
- if [ $TRAVIS_BRANCH == "master" ]; then
sbt clean coverage test coverageReport docker:publishLocal;
fi
- if [ $TRAVIS_BRANCH == "/^develop-.*$/" ]; then
sbt clean coverage test coverageReport;
fi
Run Code Online (Sandbox Code Playgroud)
它有点工作,但我无法理解它产生的日志。这有点误导。这是来自构建服务器的日志:
[success] Total time: 22 s, completed Aug 8, 2017 5:29:28 PM
The command "if [ $TRAVIS_BRANCH == "master" ]; then sbt clean coverage test coverageReport docker:publishLocal; fi" exited with 0.
0.00s
$ if [ $TRAVIS_BRANCH == "/^develop-.*$/" ]; then sbt clean coverage test coverageReport; …Run Code Online (Sandbox Code Playgroud) 我正在阅读Akka流的文档,我遇到了mapConcat运算符,就像flatMap一样(至少在概念层面).
这是一个简单的例子:
scala> val src = Source.fromFuture(Future.successful(1 to 10))
src: akka.stream.scaladsl.Source[scala.collection.immutable.Range.Inclusive,akka.NotUsed] = Source(SourceShape(FutureSource.out(51943878)))
Run Code Online (Sandbox Code Playgroud)
我期待源的类型是:
akka.stream.scaladsl.Source[Future[scala.collection.immutable.Range.Inclusive],akka.NotUsed]
Run Code Online (Sandbox Code Playgroud)
为什么不是这样?
我对每行的类型的理解如下所示:
Source
.fromFuture(Future.successful(1 to 10)) // Source[Future[Int]]
.mapConcat(identity) // Source[Int]
.runForeach(println)
Run Code Online (Sandbox Code Playgroud)
但上面例子中的Source类型并不是我想象的那样!
我有以下实现:
val dateFormats = Seq("dd/MM/yyyy", "dd.MM.yyyy")
implicit def dateTimeCSVConverter: CsvFieldReader[DateTime] = (s: String) => Try {
val elem = dateFormats.map {
format =>
try {
Some(DateTimeFormat.forPattern(format).parseDateTime(s))
} catch {
case _: IllegalArgumentException =>
None
}
}.collectFirst {
case e if e.isDefined => e.get
}
if (elem.isDefined)
elem.get
else
throw new IllegalArgumentException(s"Unable to parse DateTime $s")
}
Run Code Online (Sandbox Code Playgroud)
所以基本上我正在做的是,我在Seq上运行并尝试解析不同格式的DateTime。然后,我收集成功的第一个,如果不成功,则抛出异常。
我对代码不完全满意。有没有更好的方法可以简化它?我需要将异常消息传递给调用者。
我有一个 Rust 程序,我想用开始时间和结束时间做一些简单的基准测试!
use chrono::{NaiveTime, Utc};
fn main() {
let start_time: NaiveTime = Utc::now().time();
let end_time: NaiveTime = Utc::now().time();
println!("Total time taken to run is {}", end_time - start_time);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码打印为:
Total time taken to run is PT520.532696S
Run Code Online (Sandbox Code Playgroud)
如果我没记错的话,我想是 520 秒,但是我如何将其转换为分钟?有没有更好的办法?
有没有办法在 Play 框架的视图模板中包含纯 html 页面?我有一个场景,其中有一个通用视图模板,并且在模板正文中,我想包含某些静态 html 页面。我知道我可以在某个模板中包含其他模板,但我不确定是否可以包含纯 html 页面?
我有一个Java枚举类型,有一些字符串,我想模式匹配.这是我到目前为止所做的:
public enum MyEnum {
YEAR, MONTH;
}
Run Code Online (Sandbox Code Playgroud)
在我的scala函数中,我执行以下操作:
timePeriod.toUpperCase match {
case MyEnum.YEAR.name => doSomething
case MyEnum.MONTH.name => doSomething
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到以下错误:
stable identifier required, but YEAR.name found
Run Code Online (Sandbox Code Playgroud)
我没有足够的信息来理解错误的根本原因.有任何想法吗?
我正在尝试使用随播对象上提供的apply方法在Scala中实现工厂设计模式.我有以下方法.
sealed trait MyType {
def param: String
}
case class TypeA(param: String) extends MyType
case class TypeB(param: String, anotherParam: String) extends MyType
object MyType {
def apply(param: String): TypeA = ???
def apply(param, anotherParam: String): TypeB = ???
}
Run Code Online (Sandbox Code Playgroud)
现在,我如何在创建TypeA或的实例时强制上述特征的调用者通过伴随对象进行操作TypeB?
我有一个自定义类型定义如下:
type MyType = (String, String)
Run Code Online (Sandbox Code Playgroud)
当我使用这种类型时,我总是要经历我讨厌的元组编号.我当然可以执行以下操作并解压缩内部内容,如下所示:
val (str1, str2) = myType
Run Code Online (Sandbox Code Playgroud)
我可以为这种类型创建一个伴侣对象,并且有两个方法可以给出元组中的第一个和第二个元素吗?我想宁愿做以下事情:
myType.str1会给我第一个元素,myType.str2会给我第二个元素.
在以下示例中:
def maybeTwice2(b: Boolean, i: => Int) = {
lazy val j = i
if (b) j+j else 0
}
Run Code Online (Sandbox Code Playgroud)
当我这样称呼它时,为什么 hi 没有打印两次:
maybeTwice2(true, { println("hi"); 1+41 })
Run Code Online (Sandbox Code Playgroud)
这个例子实际上来自“Scala 中的函数式编程”一书,给出的原因是为什么“嗨”没有被打印两次对我来说不够令人信服。所以只是想在这里问这个!
我只是试图了解Scala的类型系统.我偶然发现了一个看起来像这样的代码:
trait A extends Something {
type X <: XLike
trait XLike { this: X =>
....
....
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着什么?在哪种情况下我想要像这样编码?我知道我是嵌套类型,但嵌套类型的优点是什么,并使用它来引用嵌套类型?