[解決済み] に似た三項演算子。
2023-02-21 02:46:58
質問
このような構文を避けたいのですが。
val result = this.getClass.getSimpleName
if (result.endsWith("$")) result.init else result
さて、この例では
then
と
else
の分岐は単純ですが、複雑なものをイメージすることができます。
私は以下のように構築しました。
object TernaryOp {
class Ternary[T](t: T) {
def is[R](bte: BranchThenElse[T,R]) = if (bte.branch(t)) bte.then(t) else bte.elze(t)
}
class Branch[T](branch: T => Boolean) {
def ?[R] (then: T => R) = new BranchThen(branch,then)
}
class BranchThen[T,R](val branch: T => Boolean, val then: T => R)
class Elze[T,R](elze: T => R) {
def :: (bt: BranchThen[T,R]) = new BranchThenElse(bt.branch,bt.then,elze)
}
class BranchThenElse[T,R](val branch: T => Boolean, val then: T => R, val elze: T => R)
implicit def any2Ternary[T](t: T) = new Ternary(t)
implicit def fct2Branch[T](branch: T => Boolean) = new Branch(branch)
implicit def fct2Elze[T,R](elze: T => R) = new Elze(elze)
}
と定義すると、上記の単純な例を置き換えることができる。
this.getClass.getSimpleName is {s: String => s.endsWith("$")} ? {s: String => s.init} :: {s: String => s}
しかし、どうすれば
s: String =>
? みたいなのが欲しいです。
this.getClass.getSimpleName is {_.endsWith("$")} ? {_.init} :: {identity}
コンパイラが型を推論するために余分なものが必要なのでしょう。
どのように解決するのですか?
以下のように Scalaで三項演算子を定義して、先頭のトークンを保存するには? に対する答えと Optionで値をラップするのは良いパターンですか? を取得するために
scala> "Hi".getClass.getSimpleName |> {x => x.endsWith("$") ? x.init | x}
res0: String = String
scala> List.getClass.getSimpleName |> {x => x.endsWith("$") ? x.init | x}
res1: String = List
これはあなたのニーズにとって適切ですか?
関連
-
[解決済み] ネストした構造体をよりきれいに更新する方法
-
[解決済み] Scalaでリストを2つのフィールドでソートするには?
-
[解決済み] Scalaの定数の命名規則?
-
[解決済み] Scalaでimmutable.Mapをmutable.Mapに変換するにはどうしたらいいですか?
-
[解決済み] scala で複数の case class をマッチングさせる
-
[解決済み] なぜ `private val` と `private final val` は違うのですか?
-
[解決済み] 関数型プログラミング(特にScalaとScala API)におけるreduceとfoldLeft/foldの違いとは?
-
[解決済み] Scala で複数の暗黙の引数を持つ関数を定義する
-
[解決済み] フォールドの早期中止
-
[解決済み] タプルのリストをマップに変換する (重複するキーに対処する?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ネストした構造体をよりきれいに更新する方法
-
[解決済み] private[this] vs private
-
[解決済み] Scala の Case Classes のオーバーロード・コンストラクタ?
-
[解決済み] Scalaでサブアレイを取得する正しい方法は何ですか?
-
[解決済み] Scalaでマップを反転させるエレガントな方法
-
[解決済み] Scala型プログラミングリソース
-
[解決済み] SBTのrunアクションでアプリケーションを実行するために、JVMの最大ヒープサイズを"-Xmx "で指定する方法は?
-
[解決済み] フォールドの早期中止
-
[解決済み] sbtのヒープサイズを設定するには?
-
[解決済み] タプルのリストをマップに変換する (重複するキーに対処する?)