type Node int
node, err := strconv.Atoi(num)
Foo(Node(node)) // Foo takes a Node, not an int
上記の例で醜い「Node(node)」を回避することは可能ですか? ノードを int ではなくノードと見なすようにコンパイラに強制する、より慣用的な方法はありますか?
type Node int
node, err := strconv.Atoi(num)
Foo(Node(node)) // Foo takes a Node, not an int
上記の例で醜い「Node(node)」を回避することは可能ですか? ノードを int ではなくノードと見なすようにコンパイラに強制する、より慣用的な方法はありますか?
本当にエレガントなものはありません。中間変数を定義できます
n, err := strconv.Atoi(num)
node := Node(n)
または、ラッパー関数を定義できます
func parseNode(s string) Node {
n, err := strconv.Atoi(num)
return Node(n)
}
しかし、1行のトリックはないと思います。あなたのやり方は問題ないようです。Go のあちこちでまだ少し吃音があります。
いいえ。変換は (変換可能な) 式を変換します。関数の戻り値は、関数が厳密に 1 つの戻り値を持っている場合、項 (したがって、おそらく変換可能な式) です。変換の対象となる式に関するその他の制限については、こちらを参照してください。