[解決済み] Goでenumを表現する慣用的な方法は何ですか?
2022-03-15 12:32:36
質問
N個の塩基からなる単純化された染色体を表現したいのですが、各塩基は以下のうちの1つでしかありません。
{A, C, T, G}
.
enumで制約を形式化したいのですが、Goでenumをエミュレートする最もイディオム的な方法は何でしょうかね。
どのように解決するのですか?
言語仕様書から引用します。 イオタ
<ブロッククオート定数宣言の中で、事前に宣言された識別子ιは、型付けされていない連続した整数の定数を表します。予約語 const がソースに現れるたびに 0 にリセットされ、 ConstSpec が現れるたびに増加します。これを用いて、関連する定数の集合を構築することができます。
const ( // iota is reset to 0
c0 = iota // c0 == 0
c1 = iota // c1 == 1
c2 = iota // c2 == 2
)
const (
a = 1 << iota // a == 1 (iota has been reset)
b = 1 << iota // b == 2
c = 1 << iota // c == 4
)
const (
u = iota * 42 // u == 0 (untyped integer constant)
v float64 = iota * 42 // v == 42.0 (float64 constant)
w = iota * 42 // w == 84 (untyped integer constant)
)
const x = iota // x == 0 (iota has been reset)
const y = iota // y == 0 (iota has been reset)
ExpressionList 内では、各 iota の値は各 ConstSpec の後にのみインクリメントされるため、同じ値です。
const (
bit0, mask0 = 1 << iota, 1<<iota - 1 // bit0 == 1, mask0 == 0
bit1, mask1 // bit1 == 2, mask1 == 1
_, _ // skips iota == 2
bit3, mask3 // bit3 == 8, mask3 == 7
)
この最後の例は、最後の空でない式リストの暗黙の繰り返しを利用したものです。
つまり、あなたのコードは次のようになります。
const (
A = iota
C
T
G
)
または
type Base int
const (
A Base = iota
C
T
G
)
baseをintとは別の型にしたい場合。
関連
-
[解決済み】Java:サブクラス下のenumでswitchステートメントを使用する
-
[解決済み] C++でenumを前方に宣言する
-
[解決済み] C#の[Flags]Enum属性の意味とは?
-
[解決済み] Objective-Cのtypedef enumとは何ですか?
-
[解決済み] 列挙型をサブクラス化して、新しい要素を追加することはできますか?
-
[解決済み] enumとは何か、なぜ有用なのか?
-
[解決済み] Enum "Inheritance" (継承)
-
[解決済み】整数の範囲内で反復処理する方法はありますか?
-
[解決済み] angular2 のビューテンプレートで enum を渡す
-
[解決済み] 逆引きでKotlinのEnumを効率的に使う?
最新
-
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 実装 サイバーパンク風ボタン