パターンマッチングを使用するためのScalaのコンパイル時型定数

Naetmul

代数的データ型(ケースオブジェクト)を使用して、パターンマッチングで使用する型を表します。

sealed trait PrimitiveType
case object IntType extends PrimitiveType
case object LongType extends PrimitiveType
case object StringType extends PrimitiveType
...

def valueType(key: String): PrimitiveType = {
  "NAME" => StringType
  "AGE" => IntType
  ...
}

def read(db: Database, key: String): Unit = valueType(key) match {
  case IntType => send(db.parseIntField(database, key))
  case LongType => send(db.parseLongField(database, key))
  case StringType => send(db.parseStringField(database, key))
  ...
}

しかし、あなたは知っている、既に存在しているIntLongString、などScalaの中に。
これらを表すためにいくつかのケースオブジェクトを定義するのは無駄だと思います。
私は変更したいIntTypeLongType、...にInt.typeLong.typeまたは何でも私はパターンマッチングに使用することができます。

この場合、何が効率的ですか?
ありclassOftypeOfTypeTagClassManifest、...しかし、私はそれらの間の正確な違いを見ることができません。

私はScala2.11を使用しているのでTypeTag、この場合に有効であれば問題ありません。

アレクセイロマノフ

この場合(つまり、プリミティブ型のみを扱い、ジェネリックスは気にしない)、それらはすべて正常に機能します。新しいプロジェクトでマニフェストを使用しても意味がないことを除いて。例:タイプタグ付き:

import scala.reflect.runtime.universe._

val TypeTagString = typeTag[String]

def valueType(key: String): TypeTag[_] = {
  "NAME" => TypeTagString
  "AGE" => TypeTag.Int
  ...
}

def read(db: Database, key: String): Unit = valueType(key) match {
  case TypeTag.Int => send(db.parseIntField(database, key))
  case TypeTag.Long => send(db.parseLongField(database, key))
  case TypeTagString => send(db.parseStringField(database, key))
  ...
}

ただし、元のデザインに戻って少し変更することを検討します。

sealed trait PrimitiveType[T] {
  def parseField(db: Database, key: String): T
}
case object IntType extends PrimitiveType[Int] {
  def parseField(db: Database, key: String) = db.parseIntField(key)
}
...

def read(db: Database, key: String): Unit = valueType(key).parseField(db, key)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

ファイルをコピーするためのフォルダとファイル名のパターンマッチングを使用したrsync

分類Dev

パターンマッチングのためにタプルを分解する

分類Dev

Coqで既存の型付きコンストラクターの等価性を実装するための型のパターンマッチング

分類Dev

理解のためのscalaパターンマッチング

分類Dev

Scala:パス依存型でのパターンマッチング

分類Dev

HTMLをフェッチするための長いコンパイルとインストール時間

分類Dev

自動型変換を使用したScalaパターンマッチング変数バインディング

分類Dev

Scalaでのパターンマッチング中の誤った型推論

分類Dev

Sparkudfを使用したScalaの範囲でのパターンマッチング

分類Dev

Scalaでの型推論とパターンマッチング

分類Dev

重複コードを減らすためのカスタムツリーデータ型のHaskellパターンマッチング

分類Dev

LibGDXでタイルをレンダリングするためのパフォーマンスコスト

分類Dev

PartialEqとEqを実装しているのに、パターンマッチング時に定数を使用できないのはなぜですか?

分類Dev

ケースクラスのunapplyメソッドは、パターンマッチングを行うためにScalaコンパイラーによって使用されません。それはなぜですか?

分類Dev

インスタンスメンバーを使用するためのコーディングパターン

分類Dev

インスタンスメンバーを使用するためのコーディングパターン

分類Dev

パラメータをコンパイル時定数または変数として渡す場合の関数のパフォーマンスの違い

分類Dev

Haskell-パターンマッチングで定数を使用する

分類Dev

Scalaの場合、偶数をパターンマッチングする方法は?

分類Dev

Scalaの関数をパターンマッチングする方法は?

分類Dev

Scalaリストの頭と尾のタイプをパターンマッチングする方法は?

分類Dev

ログ内の番号を照会するためのパターン マッチング

分類Dev

TypeTagを使用したジェネリック型でのScalaパターンマッチングは警告を生成しますが、ClassTagは生成しませんか?

分類Dev

Skype forBusinessチャットルームを開くためのコマンドラインパラメーター

分類Dev

C#でエミュレーターをマルチスレッド化するためのアドバイス。パターン/コンセプト

分類Dev

型族を定義するのではなく、型レベルのパターンマッチングを使用する方法はありますか?

分類Dev

Scalaでのタイプレベルのパターンマッチング

分類Dev

構造体のどこにもパディングがないことを確認するためのコンパイル時チェック

分類Dev

パターンマッチングの実行時間を最適化する

Related 関連記事

  1. 1

    ファイルをコピーするためのフォルダとファイル名のパターンマッチングを使用したrsync

  2. 2

    パターンマッチングのためにタプルを分解する

  3. 3

    Coqで既存の型付きコンストラクターの等価性を実装するための型のパターンマッチング

  4. 4

    理解のためのscalaパターンマッチング

  5. 5

    Scala:パス依存型でのパターンマッチング

  6. 6

    HTMLをフェッチするための長いコンパイルとインストール時間

  7. 7

    自動型変換を使用したScalaパターンマッチング変数バインディング

  8. 8

    Scalaでのパターンマッチング中の誤った型推論

  9. 9

    Sparkudfを使用したScalaの範囲でのパターンマッチング

  10. 10

    Scalaでの型推論とパターンマッチング

  11. 11

    重複コードを減らすためのカスタムツリーデータ型のHaskellパターンマッチング

  12. 12

    LibGDXでタイルをレンダリングするためのパフォーマンスコスト

  13. 13

    PartialEqとEqを実装しているのに、パターンマッチング時に定数を使用できないのはなぜですか?

  14. 14

    ケースクラスのunapplyメソッドは、パターンマッチングを行うためにScalaコンパイラーによって使用されません。それはなぜですか?

  15. 15

    インスタンスメンバーを使用するためのコーディングパターン

  16. 16

    インスタンスメンバーを使用するためのコーディングパターン

  17. 17

    パラメータをコンパイル時定数または変数として渡す場合の関数のパフォーマンスの違い

  18. 18

    Haskell-パターンマッチングで定数を使用する

  19. 19

    Scalaの場合、偶数をパターンマッチングする方法は?

  20. 20

    Scalaの関数をパターンマッチングする方法は?

  21. 21

    Scalaリストの頭と尾のタイプをパターンマッチングする方法は?

  22. 22

    ログ内の番号を照会するためのパターン マッチング

  23. 23

    TypeTagを使用したジェネリック型でのScalaパターンマッチングは警告を生成しますが、ClassTagは生成しませんか?

  24. 24

    Skype forBusinessチャットルームを開くためのコマンドラインパラメーター

  25. 25

    C#でエミュレーターをマルチスレッド化するためのアドバイス。パターン/コンセプト

  26. 26

    型族を定義するのではなく、型レベルのパターンマッチングを使用する方法はありますか?

  27. 27

    Scalaでのタイプレベルのパターンマッチング

  28. 28

    構造体のどこにもパディングがないことを確認するためのコンパイル時チェック

  29. 29

    パターンマッチングの実行時間を最適化する

ホットタグ

アーカイブ