在C#中,您可以执行此操作
public class Foo
{
public string Name { get; private set; }
public Foo(string name)
{
Name = name;
}
}
public static void Main()
{
var foo = new Foo("Foo Object");
Console.WriteLine(foo.Name);
// Will not compile
// foo.Name = "Bar Object";
}
您可以在Nim中执行相同的操作(或具有预期效果的操作吗?
Nim在类型范围上没有封装(并且由于Nim不是面向对象的语言,所有数据处理都与数据本身分开,因此没有意义)。使用模块范围封装可以达到相同的效果:
foo.nim:
type Foo* = ref object
name: string
proc newFoo*(name: string): Foo =
new result
result.name = name
proc name*(self: Foo): string =
self.name
main.nim:
import foo
let f = newFoo("Foo Object")
echo f.name
# Error: attempting to call undeclared routine: 'name='
# f.name = "Bar Object"