ili*_*rit 1 immutability nim-lang
在 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";
}
Run Code Online (Sandbox Code Playgroud)
你能在 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
Run Code Online (Sandbox Code Playgroud)
main.nim:
import foo
let f = newFoo("Foo Object")
echo f.name
# Error: attempting to call undeclared routine: 'name='
# f.name = "Bar Object"
Run Code Online (Sandbox Code Playgroud)