Scala の Enumeration について

@kmizu さんと @keisuke_n さんの Enumeration についての議論. @NetPenguin さんと @yasushia さんもちょっと関わっていたので発言を載せてあります.
2
前へ 1 2 3 ・・ 8 次へ
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu あと具体的なコードサンプルをだせないのですが、Value型で定数としてのid: Intを取りたかったのですが、タイミング的にいろいろダメなケースがあってどうも欲しいものじゃなくなりました。

2010-06-04 18:12:50
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu あとsealed trait or abstract class(場合によってはcase class)の方がAPIとして提示するときにわかりやすいんですよ。Javaのenumでも同じですが、[enum].[名前]も面倒くさいですし。

2010-06-04 18:14:50
📙🔭✨NISHIMOTO Keisuke @keisuke_n

static importすればとか、つっこまれそうだけど、うーm。たぶんenumに関してはCとJavaの中間がちょうどいい感じなんですよね。Javaのenumは融通利きすぎだけど提供する側も使う側も冗長だし。

2010-06-04 18:17:00
📙🔭✨NISHIMOTO Keisuke @keisuke_n

Cのenumはまぁ妥協点ではあります。ただし型がいまいち(ただし最新のCを確認してない)なのと名前がバッティングしそうなのもあるけど、まぁこのあたりは名前空間が分かれればいいかな。

2010-06-04 18:18:19
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@kmizu それからScalaのランタイムのせいかもしれませんが、動的にValueが取られるために使えないケースがありました。先ほどから何度も言ってますが。これが結構大問題で、定数じゃないつけだと思います。

2010-06-04 18:20:01
📙🔭✨NISHIMOTO Keisuke @keisuke_n

いや実際ScalaのEnumerationは使われているのだろうか。結局いろんな問題があって使われていないと思う。

2010-06-04 18:21:19
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n どうも書いた順にvalに値が設定去れるっぽいですね。なので後方に出現するvalを前方のvalの初期値として参照するとnullになったりしてはまった事があります。lazyつけると回避できるっぽいですが…。

2010-06-04 19:59:37
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@NetPenguin そうそう、結構はまりますよね。ちなみにval a, b, c = Valueというのは、val a = Value; val b = Value; val c = Valueのシンタックスシュガーなんで、そうなっちゃうわけですが、定数という頭があると...

2010-06-04 20:01:57
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n あぁ、混乱しますね。イディオムとして覚えてしまうしか…

2010-06-04 20:13:50
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@NetPenguin いやちょっと過去にも話をしたんですけど、Javaほど充実していなくてもいいからオブジェクトとして扱える定数のenumが文法として欲しいです。もちろんないからといって不便でもなんでもないんですが...。 #Scala

2010-06-04 20:21:10
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@NetPenguin でさきほどlazy valすれば、とおっしゃっいましたけど、まさにlazy valすれば解決しますね。ただし2.7.xは例の2回インスタンス化されるバグがあるので2.8をさっさと使いたいところですが...

2010-06-04 20:22:31
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n 読んできました。自分の場合もsealed使ってますね。Enumerationはテクニックとしては面白いんですが、使うとなるとどうにも馴染めなくて…(汗

2010-06-04 20:27:06
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@NetPenguin あー説明不足なところはあるんですが、型・定数ではない・時々初期化されてない場面があって萎えるなどなどで、Enumeration使う意義を感じてません...

2010-06-04 20:28:50
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n え?そんなバグがあったんですか?今まで気付いていませんでした(汗(汗

2010-06-04 20:29:10
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@NetPenguin でsealed trait/abstract classは思ったより記述が冗長じゃないんですよね。面倒なことには違いないんですが、1つ作ればあとはコピペなんで気にしていません。Enumerationもそうかもしれませんが、大げさに思えちゃって...

2010-06-04 20:30:04
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n たしかに、不安&いまいち使いどころがわからないですよね…

2010-06-04 20:33:07
📙🔭✨NISHIMOTO Keisuke @keisuke_n

@NetPenguin 2.7.7.finalはなおっているみたいですけど。

2010-06-04 20:34:28
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n そうそう、同意です!!そのあたりはscalaでは型をつくりやすいとい利点が出ていますよね。

2010-06-04 20:34:53
うんこ💩HIZA💩ペンギン @NetPenguin

@keisuke_n あぁ、良かったです。情報ありがとうございます。

2010-06-04 20:36:16
📙🔭✨NISHIMOTO Keisuke @keisuke_n

念のため書いておこう。Scala 2.7.7.finalでlazy valが2回初期化されるバグは直っている。

2010-06-04 20:46:53
📙🔭✨NISHIMOTO Keisuke @keisuke_n

というかもう2.8に移行しちゃってもいいかもしんないが...

2010-06-04 20:47:14
📙🔭✨NISHIMOTO Keisuke @keisuke_n

まぁScala 2.7で困ることはそんなにないんだが、デフォルト引数とかcopyメソッドとかすごく細かくて便利なものが導入されてるからな。

2010-06-04 20:49:47
kmizu @kmizu

@keisuke_n えーと、Enumerationは普通objectで使うから誤ってそれがさらに継承される心配は無いですよね。object X extends Enumeration { ... } で、Xを継承する方法は存在しないので。 #scala

2010-06-05 10:25:47
kmizu @kmizu

@keisuke_n 定数としてのid: Intを取りたい、というのはどういう意図でしょうか?普通の使い方(つまり、object X extends Enumerationとするとき)に駄目なケースが思いつかないです。 #scala

2010-06-05 10:28:49
kmizu @kmizu

@keisuke_n うーん。それだとあいまい過ぎて何が問題だったのかがよくわからないわけです(いや、もちろんその義務は無いですけど)。Javaのenumも値の確保は(実行時という意味で)動的で、ScalaのEnumerationも動的です。で、(続く)

2010-06-05 10:30:32
前へ 1 2 3 ・・ 8 次へ