【发布时间】:2015-12-29 18:51:34
【问题描述】:
这实际上是一个普遍的问题,但现在我正在使用 Go 和 C#。 假设我们想根据用户在 Go 中的输入分配一个变量:
func main() {
var input float64
fmt.Scan(&input)
}
很清楚为什么我们需要一个内存位置来放置我们的新值。但是为什么在 Java 或 C# 等语言中,我们没有遵循相同的逻辑:
var input = Convert.ToInt32(Console.ReadLine());
// and not &input ...
【问题讨论】:
-
这是一个陈述而不是一个问题。引用与价值在 C# 和 Java 中更加抽象。我个人认为这不是一件好事。在您的示例中,您不需要引用来执行分配,您必须通过引用来传递
Scan,因为它就是这样设计的。它不能是任何语言的值,所以在 C# 中,因为像 int 这样的类型总是值类型,它可能会返回值或使用 out 参数。 -
嗯,关于对象如何在 C#/Java 中产生引用而不是在 Go 中的答案中的内容是正确的,但这个示例并没有真正涉及它,必然。您可以使用
(*bufio.Reader).ReadString读取字符串,使用strconv.Atoi将其转换为int,并将其分配给Go 中的变量,尽管Scan更短。