2009-07-06
Scala でコマンドの実行結果を文字列として取得
もっとシンプルに書けたりするのかな…。
import scala.collection.immutable.PagedSeq;
import java.io.InputStreamReader;
import java.lang.Runtime;
def exec(str:String) = {
val process = Runtime.getRuntime.exec(str)
PagedSeq.fromReader(new InputStreamReader(process.getInputStream)).toString
}
println(exec("uname -a"))
// => Linux paprika 2.6.30-1-686 #1 SMP Sun Jun 14 16:11:32 UTC 2009 i686 GNU/Linux
Scala の文字列操作 大文字小文字の入れ替え
// 本当は Case クラスで書きたいけどどうやるんだろ…
def swapchar(c:Char): Char = {
if (c.isLowerCase)
c.toUpperCase
else if (c.isUpperCase)
c.toLowerCase
else
c
}
def swapcase(self:String): String =
if (self == null) null
else if (self.length == 0) ""
else {
val chars = self.toCharArray
new String(chars map swapchar _)
}
println(swapcase("aBc DeF"))
//# => AbC dEf
Implicit Conversions で、String.swapcase だけ呼ばれたときだけ暗黙の関数呼び出ししたいんだけど、毎>回クラス定義しないとだめなのかなぁ。イメージ的には
implicit def strswapcase (s:String) = Class(s:String) {
def swapcase: String = ...
みたいな、無名クラスというか...
Scala の文字列
とりあえずいろいろ覚書を。間違っていたら識者の方が指摘してくれるはず…!
文字列リテラル "string" は java.lang.String が返るが、Implicit Conversions によって、scala.runtime.RichString の関数へと変換されるべきものは変換され実行される。
"string".substring(3) //=> java.lang.substring が呼び出される
"string".reverse //=> 暗黙的に変換され scala.runtime.RichString.reverse が呼び出される
このへんの実装は scala.Predef に書いてある。
implicit def stringWrapper(x: String) = new runtime.RichString(x)
// RichString => String もある
implicit def richString2String(x: runtime.RichString): String = if (x eq null) null else x.toString
おもしろーい
X 立ち上げず VirtualBox の windows(ホスト) <-> Linux (ゲスト)間のクリップボード共有ってできるの!?
タイトルママ。教えて君です。