Scala in Snow Leopard

Scala 開発環境を整える.
Step by Step Scala があるので,
なんとかエディタとかの環境を整えておこうというのが趣旨.

この辺は普通.
参考にあるscala-lang のところにあるのから一寸変えた*1

$ sudo port install scala
$ svn export http://lampsvn.epfl.ch/svn-repos/scala/scala-tool-support/trunk/src/emacs scala-mode
;;; for scala
(add-to-list 'load-path "/path/to/some/directory/scala-mode")
(require 'scala-mode-auto)
;;; with yasnippet
(setq yas/my-directory "/path/to/some/directory/scala-mode/contrib/yasnippet/snippets")
(yas/load-directory yas/my-directory)
(add-hook 'scala-mode-hook
          '(lambda ()
             (yas/minor-mode-on)
             ))

ぐあっ.F1 で speedbar が出た.
とりあえずそのままにしておく.

M-x scala-run-scalaインタプリタを起動し,

  • C-c C-b (M-x scala-eval-buffer)
  • C-c C-r (M-x scala-eval-region)

で確認しながら作業するのかな.

バッファが居ないと,結果が見れないので,
バッファをちゃんと残しておくよう意識しないとが面倒かなぁ.

を使ったりするのかな?触る余地がありそう.

参考

flymake 自体は動作するんだけど,
スクリプトを書くだけだとクラスが無いのでエラーになっちゃう.
その辺を上手く回避したい.

2009/10/11 10:15 削除: 元記事を修正されたのこと
string-not-empty ってのが無かったみたいなので,
(and dir (not (sring= dir ""))) とか,適当にでっちあげた.

16:47 追記

object Hello {
  def main(args: Array[String]) {
    for (arg <- args)
      println("Hello, " + arg + "!")
  }
}

Singleton の main メソッドがあればいいみたい.
とわいえ,スクリプト書きたい...

2009/10/07 18:02 追記

これ便利スギだろ.Emacs から引けるようにしたい

注意点

  • clone の URI が何故か小文字を見に行ってたのでハマった
  • SCALA_DOC_HOME は最後にスラッシュが必要
$ git clone git://github.com/yuroyoro/InteractiveHelp.git # CaseSensitive だった
$ cd InteractiveHelp
$ unzip scala-2.7.5-apidocs-fixed.zip
$ echo export SCALA_DOC_HOME=$PWD/scala-2.7.5-apidocs-fixed/ >> ~/.zshrc # 最後にスラッシュが必要っぽい
$ source .zshrc
$ scala -cp $PWD/interactive-help-1.0.jar
> import com.yuroyoro.interactivehelp.Export._
> h("List")
   0:Class scala.List
   1:Object scala.List

res0: com.yuroyoro.interactivehelp.Document = Seq

Emacs は,とりあえ以下のように設定.(SCALA_DOC_HOME は設定済みとする)
ih 部分はダウンロードしたディレクトリを適宜指定する.
とりあえず,動きそう.とあいえ,動作させた h("List") みたいなものが表示されたいなぁ.

;;; scaladoc
(let ((ih (expand-file-name "s/app/InteractiveHelp/" home)))
  (setq scala-interpreter
        (concat "scala -cp "
                (concat ih "interactive-help-1.0.jar")
                " -i "
                (concat ih "import.scala"))))
(defun my-scala-doc ()
  "カーソル付近のScala doc を引く"
  (interactive)
  (let ((bounds (bounds-of-thing-at-point 'word)))
    (if bounds
        (let* ((beg (car bounds))
               (end (cdr bounds)))
          (my-scala-doc-1 (concat "\"" (buffer-substring beg end) "\""))))))
(defun my-scala-doc-1 (&optional arg)
  "引数指定をして直接scala doc を引く"
  (interactive "sscala help args(ex \"List\", 0): ")
  (scala-check-interpreter-running)
  (comint-send-string scala-inf-buffer-name (concat "h(" arg ")\n")))

*1:emacs 以外不要なので