1

PostgreSQL データベースのメタデータをプローブするコードがあるため、コードがマジック ストリングで記述されていることがわかります。

(case data_type
   "integer"   ...
   "smallint"  ...
   "bigint"    ...
   "boolean"   ...
   ...

ここで、「integer」「smallint」などは、データベースのメタデータ テーブルのクエリから返される値です。

この投稿ではキーワードの使用を提案しているため、おそらくこれらの文字列をより適切に整理する方法は、そのような魔法の文字列のコレクションごとにエンコード/デコード関数のペアを定義することでしょうか?

例えば:

(defn datatypes-val->kwd [val] ;; return keyword from value
(defn datatypes-kwd->val [kwd] ;; return value from keyword

しかし、( Javaのenumのように)型の安全性が得られないので、本当に手間をかける価値があるのでしょうか?

4

1 に答える 1

2

あなたは正しいです。明らかな理由から、「コンパイル時」の型安全性を購入することはできません。

case ステートメントに関するコンテキストはあまり提供されていませんが、データ型の新しいケースを簡単に追加できるように、マルチメソッドを使用してデータ型をディスパッチすることを提案できる設計アプローチの 1 つです。以下のようなもの:

(defmulti get-data (fn [type val] type))

(defmethod get-data "integer" [type val]
  ;do something with val and return result
  )

(defmethod get-data "smallint" [type val]
  ;do something with val and return result
  )
于 2013-03-22T10:30:36.667 に答える