読者です 読者をやめる 読者になる 読者になる

メソッドを関数に内包して関数のように扱うと便利

メソッドを関数に内包すると関数のように扱える。初期化済みのインスタンスや構造体を使うことで、構造体の初期化をしなくていいようにしている。これは特にライブラリを作るときに便利で、lib.func() という風にメソッドを呼ぶことができる。ライブラリが呼び出される時に、インスタンスや構造体を初期化しておくとよい。

golangだと以下のように書く。tkmru/pbas: Config file finder for golangより引用。

package pbas

import (
    "io/ioutil"
    "path"
)

type Pbas struct {
    configName  string
    configPaths []string
}

var p *Pbas

func init() {
  p = new(Pbas)
  p.configName = ""
  p.configPaths = []string{}
}

func SetConfigName(fileName string) { p.SetConfigName(fileName) }
func (p *Pbas) SetConfigName(fileName string) {
    if fileName != "" {
        p.configName = fileName
    }
}