Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

Scala

Scalaでクラスを継承したときのコンストラクタのパラメータ

newするときに渡す引数は、子クラス定義時も親クラス名といっしょに指定しないといけない。 class Hoge(a: Int) class Fuga extends Hoge // error: not enough arguments for constructor Hoge: (a: Int)Hoge. class Fuga(a: Int) extends Hoge(a) // ok //…

Scalaのクラスのコンストラクタの引数の可視性

valをつけるとattr_reader、varをつけるとattr_accessorになる。(Perl日記だけどRubyで例える) 何もつけないと、privateになる。 // aは何もつけない、bはval、cはvar class Hoge(a: Int, val b: Int, var c: Int) { def getA = a } val hoge = new Hoge(1…

ScalaでCharをtoIntすると文字コードになる

はまったのでメモ。 "1234567890" という文字列を List(1,2,3,4,5,6,7,8,9,0) という形にしたい。 やってみた。 "1234567890".toList //=> List[Char] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 0) "1234567890".toList.map(_.toInt) //=> List[Int] = List(49, 50…

Scalaのcollectionのviewを覚えた

RubyのEnumerable#lazyみたいなやつ。実際の中間処理をその場で実行せずに、forceメソッドが呼ばれたときとか、ループするときに、一気に実行する。 // 中間データができてしまうパターン (1 to 10).map(_ + 1).map(_ + 2) // scala.collection.immutable.In…

Scalaのコレクション系列多くてどれを使っていいのか悩む

PHPだとarray()で済んでたからな…。 とりあえず配列は、線形処理ならList、ランダムアクセスならVectorで、 辞書ならMapを使っておけばいいのでしょうか。。。 scala.collections.immutable Traversable └Iterable ├Set │├HashSet │├SortedSet ││└TreeSet │├…

Scalaの変位指定アノテーションと上限・下限境界がわからない

LL脳には辛い。 説明を読んでるときには、「なるほどなー」、と思うんだけど、いざ出てくると「どういう意味だっけ…」ってなるし、「いつ使えばいいんだ…」ってなってる。classだけではなくて、defにも使えるので、混乱する。。。 とりあえずこれは理解した…

Scalaにおける表明

assert() def add100(x: Int): Int = { val z = x + 100 assert(z >= 0) // 必ず0以上という表明 z } ensuring() def add100(x: Int): Int = { val z = x + 100 z ensuring(_ >= 0) } // ↑こう書けるので、↓こうも書ける def add100(x: Int): Int = x + 100 …

Scalaで空のListにはreduceLeft()ではなくreduceLeftOption()を使用する

要素が存在するListにはreduceLeft()で問題ない。 List(123, 234, 345).reduceLeft{ (a, b) => a + b } //=> 702 でも要素が空っぽだと、エラーになる。 List[Int]().reduceLeft{ (a, b) => a + b } // java.lang.UnsupportedOperationException: empty.redu…

Scalaで標準入力を受け取る

text1.txt 123 234 345 456 5 6 7 8 9 10上のデータが標準入力でわたってくるので、受け取りたい。Main.scala object Main extends App { import scala.io.StdIn.readLine // 1行目 val firstArg = readLine().toInt // 2行目をスペースで区切りながらInt…

Scalaでは本物の矢印記号が使える

以下のコードは等価である。 for (x <- 1 to 10) println(x) for (x ← 1 to 10) println(x) 「 2016-01-11 追記「=>」の代わりに「⇒」も使えるようだ。ひぇぇ。 val f = (s: String) ⇒ println(s) // f: String => Unit = <function1></function1>

Scalaでスクレイピング

Scalaでスクレイピングしてみた。 ライブラリ jsoup やってみた はてなホッテントリのタイトルとリンクを抽出。 build.sbt name := "scalascraping1" version := "0.0.1" libraryDependencies += "org.jsoup" % "jsoup" % "1.7.3" main.scala import org.jso…