三項演算子が (ちょっと) 羨ましい Delphi ユーザーの集い
@pik @owlsperspective IfExp<Double>(a > b).ThenWith(trueProc).ElseWith(elseProc).EndIf こんなの #チョーVBぽくてウケル
2015-07-23 15:42:43@ktz_alias @owlsperspective 多分 EndIf で T を返すのでしょうけど、これ IfExp<String>(False).ThenWith(TrueProc).EndIf ってやったら False の時に何を返すのでしょうか…?
2015-07-23 15:54:47@pik @owlsperspective 例外?かな? ifを式として扱う言語だったら、値を返す必要があるときにelseないとコンパイルエラーにするので。
2015-07-23 15:58:55@pik @owlsperspective () をオーバーロードできれば、EndIfなしにできたかもだけど(これはこれでキモイ)
2015-07-23 16:00:24@pik @ktz_alias @owlsperspective '+' が '=' で '-' が 'or' だとそれなりに意味が通るかもですね。 Ex. " IfExp<String>(1 > 0) = 'true' or 'false' "
2015-07-23 16:19:09@ht_deko @ktz_alias @owlsperspective やってたのは IfExp<String>(True) <= 'true' or 'false'; ですけど
2015-07-23 16:27:17@ht_deko @ktz_alias @owlsperspective あと IfExp<String>(True) = ['true', 'false'] とかも宣言はコンパイル通りますけど、実行側のコードが通らなかったです。
2015-07-23 16:29:55@ht_deko @ktz_alias @owlsperspective ああそっか! Equal とかの比較関数は Boolean 以外返せないのでした!
2015-07-23 16:34:13@ht_deko @ktz_alias @owlsperspective Equal を overload して Boolean に対して record helper を設定してやったらいけないかなあと思ったものの良い方法がないでござる
2015-07-23 16:46:20@pik @ktz_alias @owlsperspective 個人的には '-' と 'or (BitwiseOr)' ですかねー。 IfExp<String>(1 > 0) - 'true' or 'false'
2015-07-23 16:48:01@ht_deko @ktz_alias @owlsperspective そうしましたー! gist.github.com/freeonterminat…
2015-07-23 16:53:20@pik @ktz_alias @owlsperspective 普通は使われない "演算子オーバーロード専用の二項演算子" をエンバカさんが用意してくれればいいのに。? とか |(パイプ) とか。
2015-07-23 16:57:08@ht_deko @ktz_alias @owlsperspective あったら面白いですね! : かオーバーロードできればコロン演算子作れたんですけどねー。
2015-07-23 17:02:24@ht_deko @ktz_alias @owlsperspective と、思って作ろうとしたものの、よくよく考えると Foo.GetBar.GetBaz.ToString ってなったとき GetBar も GetBaz も TFoo 型ではないので無理でしたー/(^o^)\
2015-07-23 17:22:10