を実装してみた。
Swiftでタプル依存な体質になってしまったのでGoでも使いたいと思ってしまうことがちょいちょいあった。
アイデア元はgoderiveというcode generatorツールから。全体サンプルはこちらに
コード
基本方針としては多値関数としてタプルを定義。
ラベルでのgetter, setterをそれぞれ関数として作成し、タプルの初期化はNewABTuple
でラップする。
type ABTuple func() (*A, *B)
func (t ABTuple) A() *A {
a, _ := t()
return a
}
func (t ABTuple) B() *B {
_, b := t()
return b
}
func (t ABTuple) SetA(a *A) ABTuple {
return NewABTuple(a, t.B())
}
func (t ABTuple) SetB(b *B) ABTuple {
return NewABTuple(t.A(), b)
}
func NewABTuple(a *A, b *B) ABTuple {
return func() (*A, *B) {
return a, b
}
}
イチイチ関数書かないとダメなのでこの辺もcode generatorの方で生成されるようになると嬉しい。
上のでやっぱり便利だなと思ったらtupleのcode generator作ってみようかなと。。
改修ポイント
-
ABTuple
の型の関係でポインタレシーバに出来ずsetterでNew返すのはなんかアレ。。
追記
よくよく考えたら上のような用途だとstructで十分では...