ラベル Scala の投稿を表示しています。 すべての投稿を表示
ラベル Scala の投稿を表示しています。 すべての投稿を表示
このページの記事一覧
● 2013年6月23日日曜日 - Play Framework から Twitter4J を使う。
● 2013年6月22日土曜日 - [Play] Play 2.0.3 から Play 2.1.1 へバージョンアップ
● 2013年6月16日日曜日 - [Play] Play Framework のセッション
● 2013年6月15日土曜日 - [Play] Play の Welcome Application
● 2013年5月12日日曜日 - [Scala] AppEngine で Scala を使う
● 2013年3月2日土曜日 - [Scala] 無名関数の return の仕組み(その2)
● 2013年3月1日金曜日 - [Scala] 無名関数の return の仕組み
● 2013年2月18日月曜日 - [Scala] 無名関数中での return 文
● 2013年2月4日月曜日 - [Scala] Lazy による遅延評価
● 2013年2月2日土曜日 - [Scala] 名前渡し
● 2013年1月21日月曜日 - [Scala] 関数リテラルの2つの定義方法
● 2013年1月20日日曜日 - [Scala] Soure.fromUrl での認証
● 2012年10月18日木曜日 - [Scala] JSON の標準パーサーで数値型が Double になる問題への対処方法
● 2012年9月30日日曜日 - [Scala] Eclipse に Scala の Maven プロジェクトを インポート。の続き
● 2012年9月28日金曜日 - [Scala] Eclipse に Scala の Maven プロジェクトを インポート
● 2012年9月26日水曜日 - [Scala] REPLを使う
● 2012年9月23日日曜日 - [Scala] match 文の仕組み
● 2012年9月21日金曜日 - [Scala] 正規表現によるマッチ
● 2012年9月20日木曜日 - [Scala] 一般クラスのマッチ
● 2012年9月18日火曜日 - [Scala] Eclipse の Java プロジェクトで Scala を使えるようにする。

2013年6月23日日曜日

Play Framework から Twitter4J を使う。

Twitter 上でのログイン込みで OAuth 認証をを、 Play Framework で Twitter4J を使って試してみる。 せっかく Play を 2.1.1 に上げたところなので、 Play 2.1 の新機能である Filter 機能を使ってみよう。

アプリにアクセスすると Twitter の認証画面が出て、 認証すると Tweet するような感じで作ってみる。

2013年6月22日土曜日

[Play] Play 2.0.3 から Play 2.1.1 へバージョンアップ

最近 これまで使っていた Play 2.0.3 のバージョンを変えていなかったので、 Play 2.1.1 にバージョンアップしたらいろいろ動かなくなった。
そもそもコンパイルが通らない。

[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  ::          UNRESOLVED DEPENDENCIES         ::
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]  :: play#sbt-plugin;2.0.3: not found
[warn]  ::::::::::::::::::::::::::::::::::::::::::::::
[warn]
[warn]  Note: Some unresolved dependencies have extra attributes. 
 Check that these dependencies exist with the requested attributes.
[warn]   play:sbt-plugin:2.0.3 (sbtVersion=0.12, scalaVersion=2.9.2)
[warn]
sbt.ResolveException: unresolved dependency: 
play#sbt-plugin;2.0.3: not found

いくつか手を入れないといけなかったのでメモ。

2013年6月16日日曜日

[Play] Play Framework のセッション

Play Framework には Tomcat のような HTTP セッションがない。
Play でのセッションは Cookie として実現されている。
Play でセッションを使う場合にはこのようなコードになる。
package controllers

import play.api._
import play.api.mvc._
import play.api.mvc.RequestHeader

object Application extends Controller {
  def index = Action.apply { request => 
      val currentVal : String = request.session.get("hoge") match {
         case Some(x) => x;
         case None => "";
      }
      
      Ok("hoge = " + currentVal).withSession(
            request.session + ("hoge" -> "hogege"));
  }
}

request.session.get は Option を返すので、 パターンマッチで Some か None かを判定して、Some から値を取り出す必要がある。
もしくは、Option.getOrElse を使って、
      ...
      val currentVal : String = request.session.get("hoge").getOrElse("");
      ...
とする。こっちの方が簡単でいい。

2013年6月15日土曜日

[Play] Play の Welcome Application

Play Framework 2.0.3 で 「play new XXX」で simple Scala application を作成したときに生成される Application.scala は 以下のようになっている。

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {
  
  def index = Action { 
    Ok(views.html.index("Your new application is ready."))
  }

}

ここで、Application#index メソッドの返り値は、
play.api.mvc.Action[play.api.mvc.AnyContent]
になっている。
何が起きているのか分かりずらいので少し中を見てみることにしよう。

2013年5月12日日曜日

[Scala] AppEngine で Scala を使う

Eclipse + App Engine で Scala を使ってみる。

以前、既存 Java プロジェクトで Scala を使えるようにする方法は確認したので、 Google Web Application プロジェクトを作って、 そこで Scala が使えるようにする方法で行く。

2013年3月2日土曜日

[Scala] 無名関数の return の仕組み(その2)

前回の記事 に引き続き、無名関数中の return 文の仕組みについて調べてみる。
今回は 匿名関数を引数に引き渡して深い階層からリターンしてくる場合を見てみよう。
今回の Scala コードはこれ。

  def main(args:Array[String]) {
    println("main start")
    test();
    println("main finish")
  }

  private def test() {
    val f = () => return;
    println("test start")
    test2(f);  
    println("test finish")   // 実行されない。
  }
 
  def test2(f: () => Unit) {
    println("test2 start")
    f();
    println("test2 finish")  // 実行されない。
  }

------------------
main start
test start
test2 start
main finish

test2() 内の 匿名関数実行で test2()、test() を一気に脱出している。

2013年3月1日金曜日

[Scala] 無名関数の return の仕組み

この前の記事で、Scala の無名関数中での return 文の動きについてみてみた。

今回はその仕組みが Java 的にどうなっているのか見てみる。 JD-Plugin の導入には前回失敗したので、デコンパイルには Java Decompiler の GUI 版を使った。
前回使ったコードはこれ。
  def main(args:Array[String]) {
    println("main start")
    test();
    println("main finish")
  }
  
  private def test() {
    val f = () => return;
    println("test start")
    f();
    println("test finish")   // 実行されない。
  }

------------------
main start
test start
main finish

2013年2月18日月曜日

[Scala] 無名関数中での return 文

無名関数の中で return 文を使うと、関数を抜けるのではなく、 無名関数を定義した関数自体を抜けてしまう。
  def main(args:Array[String]) {
    println("main start")
    test();
    println("main finish")
  }
  
  private def test() {
    val f = () => return;
    println("test start")
    f();
    println("test finish")   // 実行されない。
  }

------------------
main start
test start
main finish

test() が f() 呼び出しで return していることがわかる。
関数なのだから なんとなく 無名関数 だけを return しそうな気がするので 気を付ける必要がある。

2013年2月4日月曜日

[Scala] Lazy による遅延評価

変数宣言時に Lazy キーワードをつけるとその値が必要になるまで値の評価を遅延できる。
  var x = 1;
  lazy val z = x*2;
  x = 2;
  println(z);

--------------------
4
変数宣言時には x の値は 1 だが、println(z) 呼び出しで z の値が必要になった時点で評価されるので、 出力は 4 になる。

2013年2月2日土曜日

[Scala] 名前渡し

Scala で関数を定義する際、仮引数名と型名の間に 「 => 」を記載すると名前渡しとなり、値が必要になったときに式の値が評価される。
  var x = 1;
  
  def main(args: Array[String]) {
    x = 1;  
    notdelayed(x*2);
    x = 1;  
    delayed(x*2);
  }

  def notdelayed(value : Int) {
    x = 100;
    println("notdelayed: " + value)
  }  

  def delayed(value : => Int) {
    x = 100;
    println("delayed: " + value)
    x = 200;
    println("delayed: " + value)
  }

--------------------
notdelayed: 2
delayed: 200
delayed: 400

2013年1月21日月曜日

[Scala] 関数リテラルの2つの定義方法

Scala で関数リテラルを定義する場合、通常はこのような形式で定義する。
  val a : Function2[String, String, Unit] = (x,y) => {
    val xx = x + y;
    println(xx);
  }
  a("abc", "def")

--------------------
abcdef

2013年1月20日日曜日

[Scala] Soure.fromUrl での認証

認証が必要なページへアクセスする際の認証の方法。
Apache HttpClient 等を使うのであればその流儀でやればいいのだが、scala.io.Source.fromUrl 等で簡単に済ませる場合のやりかた。

Java の java.net.URL で使う方法をそのまま使う。

2012年10月18日木曜日

[Scala] JSON の標準パーサーで数値型が Double になる問題への対処方法

前回、Scala の JSON 標準ライブラリを使ってみた。 Scala の 標準パーサーでは、数値型が常に Double として扱われてしまう問題がある。
  val text = """{ "x":1 }""";
  val result = JSON.parseFull(text);
  val map = result.get.asInstanceOf[Map[String, Option[Any]]];
  println (map.get("x").get);

--------------------
1.0

2012年9月30日日曜日

[Scala] Eclipse に Scala の Maven プロジェクトを インポート。の続き

前回、m2eclipse-scalaを使って、Scala プロジェクトの pom.xml を Eclipse にインポートした。
インポートの結果作成された .project ファイルと、.classpath ファイルの中身を確認しておく。

2012年9月28日金曜日

[Scala] Eclipse に Scala の Maven プロジェクトを インポート

Eclipse に Scala の Maven プロジェクトを m2e を使ってインポートする。

m2eclipse-scala を使う。
これをインストールしておかないと、pom.xml を import するときに、 maven-scala-plugin:2.15.2:compile と testCompile の resolve ができずにエラーになってしまう。


2012年9月26日水曜日

[Scala] REPLを使う

これまで Scala は Eclipse IDE で使ってきた。
Eclipse IDE で使う分には Scala SDK のインストールは必要ないのでインストールしていなかったのだが、 ちょっとしたことを確認するのに REPL があると便利なので入れてみる。

Scala の本家 から最新の stable release である Scala 2.9.2 をダウンロード。
Windows 版は zip 版と msi 版があるが msi 版は何がどう設置されるのかわからないので zip 版をダウンロード。 展開して bin ディレクトリにパスを通す。

これだけで準備は完了。REPL を使ってみる。

2012年9月23日日曜日

[Scala] match 文の仕組み

このブログを見て match 文 の仕組みが分かった気がするのでメモしておく。
List のマッチでは case List(x,y) みたいな形式だったので気が付かなかったのだが、 case 句には オブジェクトも書くことができる。

2012年9月21日金曜日

[Scala] 正規表現によるマッチ

正規表現を使った match ... case 文を使ってみる。

val p : Regex = ".*no=([0-9]+),name=(.*)".r;
val values = List(
  "no=10,name=ten",
  "no=11,name=eleven",
  "no=20,name=twelve" );

for (value <- values ) {
  value match {
    case p("10", v) => println("name for 10: " + v)
    case p("11", v) => println("name for 11: " + v)
    case p(n, v) => println("name, value= " + (n,v))
  } 
}

name for 10: ten name for 11: eleven name, value= (20,twelve)

2012年9月20日木曜日

[Scala] 一般クラスのマッチ

List や Tuple ではない一般のクラスの場合、unapply、unapplySeq いわゆる抽出子(extractor)を定義しておくことで match ... case 文で使えるようになる。

...
  val a = new MatchSampleClass;
  a match {
    case MatchSampleClass(x, y) => 
      println("x: " + x + " y: " + y);
    case _ => println("OTHER: " + a);
  }
....

class MatchSampleClass
object MatchSampleClass {
  def unapply(obj : MatchSampleClass) : Option[(String, String)] = {
    return Option(("ONE", "TWO"));
  }
}

x: ONE y: TWO

2012年9月18日火曜日

[Scala] Eclipse の Java プロジェクトで Scala を使えるようにする。

目標: 既存の Java プロジェクトで Scala も使えるようにすること。

基本的には、.project ファイルと .classpath ファイルに手を入れればできるはず。
やってみよう。

前提条件は、Eclipse に Scala IDE が導入されていること。
環境は、Eclipse Juno + Scala IDE nightly build 版( Juno 対応版)。

.project や .classpath ファイルを直接編集するので、Eclipse は終了しておくか編集対象プロジェクトを Close しておく。