@kmizu あと具体的なコードサンプルをだせないのですが、Value型で定数としてのid: Intを取りたかったのですが、タイミング的にいろいろダメなケースがあってどうも欲しいものじゃなくなりました。
2010-06-04 18:12:50@kmizu あとsealed trait or abstract class(場合によってはcase class)の方がAPIとして提示するときにわかりやすいんですよ。Javaのenumでも同じですが、[enum].[名前]も面倒くさいですし。
2010-06-04 18:14:50static importすればとか、つっこまれそうだけど、うーm。たぶんenumに関してはCとJavaの中間がちょうどいい感じなんですよね。Javaのenumは融通利きすぎだけど提供する側も使う側も冗長だし。
2010-06-04 18:17:00Cのenumはまぁ妥協点ではあります。ただし型がいまいち(ただし最新のCを確認してない)なのと名前がバッティングしそうなのもあるけど、まぁこのあたりは名前空間が分かれればいいかな。
2010-06-04 18:18:19@kmizu それからScalaのランタイムのせいかもしれませんが、動的にValueが取られるために使えないケースがありました。先ほどから何度も言ってますが。これが結構大問題で、定数じゃないつけだと思います。
2010-06-04 18:20:01いや実際ScalaのEnumerationは使われているのだろうか。結局いろんな問題があって使われていないと思う。
2010-06-04 18:21:19@keisuke_n どうも書いた順にvalに値が設定去れるっぽいですね。なので後方に出現するvalを前方のvalの初期値として参照するとnullになったりしてはまった事があります。lazyつけると回避できるっぽいですが…。
2010-06-04 19:59:37@NetPenguin そうそう、結構はまりますよね。ちなみにval a, b, c = Valueというのは、val a = Value; val b = Value; val c = Valueのシンタックスシュガーなんで、そうなっちゃうわけですが、定数という頭があると...
2010-06-04 20:01:57@NetPenguin いやちょっと過去にも話をしたんですけど、Javaほど充実していなくてもいいからオブジェクトとして扱える定数のenumが文法として欲しいです。もちろんないからといって不便でもなんでもないんですが...。 #Scala
2010-06-04 20:21:10@NetPenguin でさきほどlazy valすれば、とおっしゃっいましたけど、まさにlazy valすれば解決しますね。ただし2.7.xは例の2回インスタンス化されるバグがあるので2.8をさっさと使いたいところですが...
2010-06-04 20:22:31@keisuke_n 読んできました。自分の場合もsealed使ってますね。Enumerationはテクニックとしては面白いんですが、使うとなるとどうにも馴染めなくて…(汗
2010-06-04 20:27:06@NetPenguin あー説明不足なところはあるんですが、型・定数ではない・時々初期化されてない場面があって萎えるなどなどで、Enumeration使う意義を感じてません...
2010-06-04 20:28:50@NetPenguin でsealed trait/abstract classは思ったより記述が冗長じゃないんですよね。面倒なことには違いないんですが、1つ作ればあとはコピペなんで気にしていません。Enumerationもそうかもしれませんが、大げさに思えちゃって...
2010-06-04 20:30:04@keisuke_n そうそう、同意です!!そのあたりはscalaでは型をつくりやすいとい利点が出ていますよね。
2010-06-04 20:34:53念のため書いておこう。Scala 2.7.7.finalでlazy valが2回初期化されるバグは直っている。
2010-06-04 20:46:53まぁScala 2.7で困ることはそんなにないんだが、デフォルト引数とかcopyメソッドとかすごく細かくて便利なものが導入されてるからな。
2010-06-04 20:49:47@keisuke_n えーと、Enumerationは普通objectで使うから誤ってそれがさらに継承される心配は無いですよね。object X extends Enumeration { ... } で、Xを継承する方法は存在しないので。 #scala
2010-06-05 10:25:47@keisuke_n 定数としてのid: Intを取りたい、というのはどういう意図でしょうか?普通の使い方(つまり、object X extends Enumerationとするとき)に駄目なケースが思いつかないです。 #scala
2010-06-05 10:28:49@keisuke_n うーん。それだとあいまい過ぎて何が問題だったのかがよくわからないわけです(いや、もちろんその義務は無いですけど)。Javaのenumも値の確保は(実行時という意味で)動的で、ScalaのEnumerationも動的です。で、(続く)
2010-06-05 10:30:32