Scala

1~10を加算する処理を書くと (0 /: (1 to 10))(_+_)

Scala

「/:」という物が何か知りたくて調べてたら、これは foldLeftのエイリアスだと知った。 で、foldLeftというのは、何かというと、 Rubyでいうとinjectみたいなもの? rubyのinjectは .inject(0) {|result, item| result + item} と書くと、2 + 3 + 4 + 5 の結果が返ってくる 要は、0を初期値として、リストのアイテムごとにブロックで指定した処理をして、戻り値としてresultを返すという物だ これをScalaで書くと v ...

Eclipse, Scala

まずはMavenでプロジェクトを作成する scala-archetype-simple v1.3 を選択 あとは順次進んでプロジェクトを作成する できあがったプロジェクトは一度eclipseから削除する ※間違えてもディスクから削除はしない エディタなどで「.project」ファイルを開く <natures>タグの中に以下を1行を追加 <nature>org.scala-ide.sdt.core.scalanature</nature> <name ...

Scala

"%tY-%<tm-%<td".format(new Date) %tyのtは日付および時刻変換文字用の接頭辞 %<tmの<は引数のインデックスを指定するインデックスで、以前の書式指示子の引数が再利用されます つまり、 %$1tmと同じ意味になります。 $1というのは、引数のインデックスで val d1 = new Date val d2 = new Date val d3 = new Date "%tY-%$3tm-%$2td".format(d1, d2, d3) と ...

java, Scala

Failed to created JLineReader: java.lang.NoClassDefFoundError: Could not initialize class org.fusesource.jansi.internal.Kernel32 このようなエラーが出た場合、tempディレクトリにキャッシュのdllが残っているのが原因。 以下のコマンドで削除できる del %TEMP%\jansi.dll del %TEMP%\jline_.dll

Lift, Scala

Liftでコンソールを起動してモデルの動きなどを確認したい場合 プロジェクトフォルダで以下のコマンドを打ち込む C:\project> mvn scala:console -DmainConsole=LiftConsole scala> import myproject.model._ そうすれば、モデルへアクセスが出来るようになる

Ruby on Rails メモ

RailsのActiveRecordは、updated_atとcreated_atカラムがある場合、created_atには新規作成時、updated_atは新規と更新時に自動で日付が設定されます。 普段はこの動きで便利なんですが テストをする時などにupdated_atを操作したりしたい。 そんなときは以下のように書けばupdated_atに自動で日付が設定されるのを防ぐ事が出来る。 ActiveRecord::Base.record_timestamps = false record.sav ...

Scala

View BoundとContext Boundとは 「頻出する暗黙(implicit)変換・パラメータの利用方法」のシンタックスシュガー implicitとは scala> implicit val a:Int = 1 scala> implicit val s:String = "a" scala> def some(implicit v:Int) : Int = v scala> some res0: Int = 1 def some(implicit v:Int) ...

Scala

abstractとは 抽象 abstract class Main とすれば、抽象クラスになる   abstract

Scala

クラスに型パラメータを追加 class クラス名 定義例 class Sample { protected var t: T = _ def set(in: T): Unit = { this.t = in } def get(): T = { t } } 使い方 val s = new Sample s.set("abc") val v = s.get() 型パラメーターの境界(<:とか>:とか) クラスの定義と継承が以下のような状態の場合に class A1 class A2 e ...

Lift, Scala

liftで、 ProtoUserを継承している場合のログイン画面変更方法 loginXhtmlメソッドでhtmlを生成しているので、たとえばUserモデルの場合 ※デフォルトで作成されるUserモデル object User extends User with MetaMegaProtoUser {   def loginXhtml = {     (<form method="post" action={S.uri}><table><tr><td    ...

Scala

lazyというのは、値を遅延評価する宣言 // lazyをつけると、値の評価が初回アクセス時にのみ行われる lazy val a = { println("評価"); "a" } println( a ) // 初回の参照。ここでval aの評価が行われる println( a ) // これ以降は、val aの評価はなし lazyは「var」や「def」に設定することはできません。

Scala

文字列の長さを取得 scala> "test" length Int = 4 文字列の繰り返し scala> "abc" * 3 String = abcabcabc ()で、指定位置のcharを取り出す scala> "abcde"(2) Char = c 文字列の比較(<,>,<=,>=) scala> "abc" < "abd" Boolean = true StringBuilderに文字列を追加 scala> val str ...

Scala

Scalaでリストを作成する場合 val myList = List("a", "b", "c") とするが、表題のconsを使用して val myList = "a" :: "b" :: "c" :: Nil とすることが出来る。 ここに1つ重要なルールがあり、 consでリストを生成する場合、右結合になる 簡単に言うと、一番最後の項目から評価されます。 その時、一番最後の項目はListである必要があります。 Nilというのは、List型であるので、上記のconsを使用した配列の生成が成り立ち ...

Scala

Scalaの言語仕様で「::」と「:::」というのがある。 「::」とは連結メソッドですが、「:::」との違いは? scala> val list1 = List('a', 'b') list1: List = List(a, b) scala> val list2= List('c', 'd', 'e') list2: List = List(c, d, e) scala> val list3 = list1 :: list2 list3: List = List(List( ...

Eclipse, Lift, Scala

Scala and LiftのプロジェクトをEclipse上に作成する なんか、単純なようですが、うまくいかなかったので、うまくいく方法を書いておく。 Eclipseの新規作成で、Scala ProjectではScalaのプロジェクトしか作成されません。 Liftのプロジェクトを作りたいときは Maven Projectを選択 archetypeを選択 プロジェクト名などを設定 とすると、プロジェクトが作成されますが どうも、ビルダーがjavaのままでエラー出まくりだったりするので、プロジェクト ...

Lift, Scala

Scala and Liftの環境を、Ubuntu上に構築したのはいいが、やはり使い慣れたEclipse上で開発したくなりました。 ということで、Eclipseに環境を構築する手順を書いてみます。 まず、Eclipseを入れるOSですが、Windowsです。 なので、Windows上にjava環境をセットアップしていきます。 JDKインストール Windows用のJDKをダウンロード 環境変数の設定 次に、scalaです。コンソールでscala使いたいので入れておきます。 Scalaのインストー ...

Lift, Scala

Scalaが気になるので、実行環境を作ってみる。 Scalaと、Scalaでwebアプリケーションを作るに当たって必要になってくるソフトウェアを上げてみる。 Scalaとは JVM上で動作する比較的新しい言語 オブジェクト指向言語(つまりJava)と関数型言語 Liftとは Scalaで構築されたWebアプリケーションフレームワーク Mavenとは Java用プロジェクト管理ツールである 環境の構築 Ubuntu 11 はインストール済みとする。 JDKのインストール sudo apt-get ...

Ruby on Rails メモ, web

Railsでsend_fileというメソッドがある これは、ファイルなどをそのまま返す場合に使ったりするが これを使うとRailsのメモリ使用量が増加していく。 2.1でこの現象が出るが 2.3とかもかも? なんかメモリを解放してないっぽい感じですが、これに関しては、ほかの方が調べてたりするので深く調べないことにする。 で、解決方法は、x_sendfileを使うのがスマートな気がするので、これを採用する。 導入手順 apacheにmod_xsendfileを組み込む wget sudo apxs ...

Ruby on Rails 3 Tips, Ruby on Rails メモ

Railsで日付処理は、意外と簡単に出来たりする。 1日前 1.days.ago 1日後 1.days.from_now 1ヶ月前 1.months.ago 1ヶ月後 1.months.from_now 1年前 1.years.ago 1年後 1.years.from_now また、本日の開始日時として、たとえば 2011-10-01 00:00:00 という情報を取りたい場合 Date.today.beginning_of_day 逆に 2011-10-01 23:59:59 という情報を取り ...