この記事は Scala Advent Calendar 2016(Adventar) 10日目の記事です。
今は 12/10 の 625時です。年明けなんて無かった。いいね?
さてさて、sbt の依存jarのダウンロードが遅い、というのは割とよく言われる事であります。
で、この原因の一旦に、sbtが Apache Ivy を使っている、という点があります。
この記事は Scala Advent Calendar 2016(Adventar) 10日目の記事です。
今は 12/10 の 625時です。年明けなんて無かった。いいね?
さてさて、sbt の依存jarのダウンロードが遅い、というのは割とよく言われる事であります。
で、この原因の一旦に、sbtが Apache Ivy を使っている、という点があります。
2016/10/08 大阪産業創造館にてScala関西Summitが開催されました。
弊社、ゴールドスポンサーとして協賛もしてましたが、スポンサーセッションとは別に普通にCFPにも応募しました。
そんな訳で「Implicit 再入門」というタイトルで登壇してきました。
Java8 の Stream API は Stream#collect
メソッドを使って様々な集約を行う事ができます。
java.util.stream.Collectors
で様々な Collector が提供されていますが、Collectors.collectingAndThen
のような合成が中心で同時に二つの集約を行うといった事が簡単にできません。
そのため、ラムダ禁止について本気出して考えてみた - 9つのパターンで見るStream API の「7. streamの外に結果を残す(禁止度:A)」で書かれている様な思わず禁止したくなっちゃう様なコードを書かざるを得ません。
// 引用: ラムダ禁止について本気出して考えてみた
// 7. streamの外に結果を残す(禁止度:A)
void averageAndSum1(List list) {
val a: String? = ...
val b: String? = ...
val r = if (a != null && b != null) {
a + b
}
r?.let { print(it) } // else 無いと if式の代入がコンパイル通らない
@Entity | |
public class Era { | |
@Id | |
public Integer id; | |
public String name; | |
public Interval interval; | |
} |
scala> :paste
// Entering paste mode (ctrl-D to finish)
trait MyOrdering {
type E
def compare(a: E, b: E): Int
}
object MyOrdering {
scala> class A
defined class A
scala> trait X extends A
defined trait X
scala> trait Y { self: A => }
defined trait Y
public interface TreeVisitor<T> {
T visitLeaf();
T visitNode(Node node);
}
こういうVisitorなら以下の様なファクトリがあると便利かなと思ったけど