据我所知,以下代码应该编译成一个具有顶级属性Version
的DLL:
namespace MyLibrary
[Module]
class MainClass:
public static Version as string
static def constructor():
Version = "0.1"
可以编译,但是如果我在booish
中输入这些命令:
import MyLibrary
print (Version)
然后我得到"ERROR: Unknown identifier: 'Version'"。
这段代码可能在该语言的早期版本中工作。我正在使用0.9.4.9。达到这种效果的正确方法是什么?
(我注意到有一个隐式的静态类MyVersionModule
,其中顶级静态方法被放置,但我不知道如何添加属性到这个)。
在。net中,没有方法或字段实际上不是类的成员。Boo通过在模块中为主文件提供隐式类来隐藏这一点(正如您注意到的),但是在导入时仍然需要将其作为成员访问。
对于静态数据,你必须首先引用类型,然后引用成员,所以在你的例子中,打印版本是这样的:
import MyLibrary
print (MainClass.Version)
当然,这不是在。net中存储版本信息的"正确"方式,而是使用汇编级属性。它看起来更像这样:
[assembly: System.Reflection.AssemblyVersion("1.0")]
namespace MyLibrary
[Module]
class MainClass:
pass
然后得到版本,你会使用反射,有几种方法来获得汇编,但最简单的是获得类型,然后它的汇编:
import System
import System.Reflection
import MyLibrary
atts = typeof(MainClass).Assembly
.GetCustomAttributes(typeof(AssemblyVersionAttribute), false)
version = (atts[0] as AssemblyVersionAttribute).Version
print(version)