4

我知道 boo 和 Python 之间的相似之处只是表面的,但是,我怎样才能在 boo 中做与以下 Python 代码等效的操作?

a = 'a'
del a
a = 1

我试过了

a = 'a'
a = null
System.GC.Collect()                                                                                                                                                    
System.GC.WaitForPendingFinalizers()
a = 1

但是 booish 告诉我它不能将 'int' 转换为 'string'。

关键是不要使用鸭子类型。那可能吗?

编辑根据评论建议,将del从函数更改为语句。

4

2 回答 2

3

这在 Boo 中是不可能的。Boo 使用隐式静态类型。因此,所有变量都是基于它们在其范围内的第一次分配而被强类型化的。一旦赋值,变量的类型就不能改变。

垃圾收集将确保堆上不再引用的对象将从堆中删除,但它不会影响每种语言的单个变量范围。在 Boo 中,变量直到定义它的块的末尾才会超出范围。

Boo 中的 Duck 类型由编译器处理,编译器为其分配“对象”的静态类型,然后使用运行时代码来影响底层 .NET 运行时认为的通用对象的虚伪。

于 2011-06-07T13:11:00.403 回答
0

您可以将 a 声明为对象

a 作为对象 a = "letter_a"

打印一个“字母a”

a = 1 打印一个 1

比起蟒蛇,我更喜欢嘘声!

于 2011-07-18T15:28:02.753 回答