1
type Node int
node, err := strconv.Atoi(num)

Foo(Node(node))  // Foo takes a Node, not an int

上記の例で醜い「Node(node)」を回避することは可能ですか? ノードを int ではなくノードと見なすようにコンパイラに強制する、より慣用的な方法はありますか?

4

2 に答える 2

3

本当にエレガントなものはありません。中間変数を定義できます

n, err := strconv.Atoi(num)
node := Node(n)

または、ラッパー関数を定義できます

func parseNode(s string) Node {
    n, err := strconv.Atoi(num)
    return Node(n)
}

しかし、1行のトリックはないと思います。あなたのやり方は問題ないようです。Go のあちこちでまだ少し吃音があります。

于 2012-12-06T11:19:11.080 に答える
1

いいえ。変換は (変換可能な) 式を変換します。関数の戻り値は、関数が厳密に 1 つの戻り値を持っている場合、項 (したがって、おそらく変換可能な式) です。変換の対象となる式に関するその他の制限については、こちらを参照してください。

于 2012-12-06T11:20:10.473 に答える