0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Goでラベル付Tupleのようなもの

Last updated at Posted at 2017-08-26

を実装してみた。
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で十分では...

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?