- k_bigwheel
- 3434
- 1
- 5
- 0
scala - Tuple Unpacking in Map Operations - Stack Overflow bit.ly/1qzg4Wv これ、一番正しいのはbest answerじゃなくてその下のtupledを使うことじゃないかな?
2014-09-04 12:12:25以前からscalaのmapでtupleを各変数へ展開するときにcaseを使うことは間違ってる気がしてたんだけど、やっぱこれ型安全じゃないよね?Function.tupledは初めて知ったけどこれは型安全な気がするしこれを使うのが正解だと思う
2014-09-04 12:13:30match-caseが型安全じゃないことに多くの人が結構なケースで鈍感な気がする。これ記述が間違ってても実行時にしかわからないんだから静的型付けの利点を全く行かせてない
2014-09-04 12:17:28@k_bigwheel 型安全という面では、case使う場合でもタプルの型に合わないパターンを指定するとコンパイルエラーになるので安全性は担保されてますね。ただ、もちろんマッチエラーになるパターンも書けてしまうので、そういう意味ではtupledの方が安全というのは正しいと思います
2014-09-04 12:26:15@k_bigwheel @gakuzzzz それ、型安全の定義によりませんか?match-caseが(caseの中身によっては)型安全じゃないのは事実ですが。
2014-09-04 12:29:20@k_bigwheel @gakuzzzz たとえば、sealed trait + case classedだと記述が網羅的じゃなければ警告出してくれるわけですし。
2014-09-04 12:29:59@kmizu @k_bigwheel マッチエラーに配慮してないパターンマッチが安全じゃないのは確かですねー。で、その安全性を「型安全」という言葉に含めるか含めないかは言葉の定義の問題で、TaPLの「型安全」の定義だと含まれないという感じですかね
2014-09-04 12:32:10@kmizu @gakuzzzz そうか、なるほど。型安全という言葉を適当に使ってました。
2014-09-04 12:59:11Scalaのパターンマッチで、Any型をIntやStringかどうか検査するような邪悪というか本来必要ないことまでできてしまうの大体subtypingが悪かったりする(?)のでHaskell使いましょう、となるか、そういうのを禁止するコンパイルオプションが求められる
2014-09-04 13:01:30withFilterがあると、そういう邪悪なパターンマッチまで警告なしでできてしまうのでwithFilter入れるのやめましょう、という結論になった議論がこちらにあります github.com/scalaz/scalaz/…
2014-09-04 13:06:27match-caseが型安全じゃないことに多くの人が~~ bit.ly/1lB0OJG これkmizuさんとgakuzzzzさんが突っ込んでくれたんですが間違ってます。正しくはmatch-caseは型安全じゃない使い方もできる(できてしまう)が正しいです
2014-09-04 13:07:30@xuwei_k OOというか継承無しのscala欲しいですねー。っていうかJVM用のOCamlで良い、というのは判ってるんだけど仕事では使えない。
2014-09-04 13:13:10Scalaは色々出来すぎるあたりで、C++とかPerlみたいだと思う。Anyは動的言語みたいに使えて、便利だから、動的言語にはこういう機能があると嬉しいんじゃないかなぁ。 邪悪とか、本来必要ないというのは、Haskellの型システムに近づけようっていう考えから来てるのだろうけど
2014-09-04 13:18:52機能として出来る事が多いのはすばらしいし、短くかけるメリットもあるし、それを実装するのは大変なわけだし。悪者にされると腹立つなぁ。無くすなら無くすで良いとも思うし、コーディング規約で縛れば良い話で。
2014-09-04 13:22:04そういう反発がHaskell原理主義は出て行けっていう考えに繋がっていって、別の言語にForkするみたいになってるんじゃないのかな? Scala自体は好きだけど、Scalaz信者は嫌いだ。みたいになってしまうよ。 HaskellもScalazも悪くないと思うけど。
2014-09-04 13:27:28@h_sakurai 規約でしばれるならいいけど、コンパイラ側に警告だすなどのそういうオプションが全然ないので、規約でやろうとしても現実的にほぼ不可能なのが問題ですね、Anyからのパターンマッチが許されてしまってる件は・・・
2014-09-04 13:30:57.@h_sakurai 邪悪、という言い方が悪かったのかもしれませんが、たしかに仕方ないというか便利に短く使えるときもあるので「今すぐ禁止しろ」とまでは思わないですけど、同じパターンマッチでも強力さや安全性が異なるので、それを意識して使い分けれるようなオプションが欲しいというか
2014-09-04 13:35:19@k_matsuzaki OCamlだと、ここ twitter.com/xuwei_k/status… でいったScalaでの危険なパターンマッチ?のようなことって、ちゃんとできないようになってるんでしたっけ?
2014-09-04 14:58:39@xuwei_k Any型が存在しませんし、オブジェクトを一回アップキャストしてしまうともうダウンキャストできないような。(Objとかで無茶しない限り)
2014-09-04 15:08:01