Lift,Scala

class User extends LongKeyedMapper with IdPK { def getSingleton = User object uid extends MappedString(this, 24){ override def dbColumnName = "uid" // <= こんな感じ } } という感じで書く  

Lift,Scala

object User extends User with LongKeyedMetaMapper { override def dbTableName = "users" } という感じでテーブル名を指定する

Lift,Scala

前々回くらいで、【Scala】LiftでMySQLに繋ぐ(Maven編)では、MavenでMySQLにつなぐための設定をしたが、今回はsbtでMySQLにつなぐための設定を。 project/build/LiftProject.scalaファイルに、MySQLのドライバの設定を追加します。 override def libraryDependencies = Set( "net.liftweb" %% "lift-webkit" % liftVersion ...

Lift,Scala

Liftにはrun modeが6つ準備されている development test staging production pilot profile デフォルトでは、developmentが選択される。 run modeを変えて起動する場合、 -Drun.mode=production というように、起動時にオプションを指定することで変えることが出来る run modeでDBの接続する先を変えたりする場合 src/main/resources/propsにproduction.default.p ...

Lift,Scala

Scala + Liftの環境は、最初はH2DBにつながるようになっている。 一般的にサービスを提供する場合、やはりMySQLなどに繋いで使いたい ということで、MySQLに接続する方法 Mavenでプロジェクトを作っている前提で pom.xmlファイルのdependenciesに以下を追加 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</arti ...

Scala

2.9からParallel Collectionsが実装されてますが、よく分かりません。 `foreach`, `map`, `filter`などの処理をする時にマルチコア対応したコレクションという事ですかね。 import scala.collection.parallel.mutable._ しておく必要がありそうです。 例 Array(1, 2, 3, 4, 5).par.sum // または ParArray(1, 2, 3, 4, 5).sum 並列処理出来るコアの数を取得する sca ...

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._ そうすれば、モデルへアクセスが出来るようになる

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( ...