2011-10-23 88 views
1

一个全局变量,据我可以从website来讲,下面的代码应编译成一个DLL具有顶级性能Version声明中嘘声

namespace MyLibrary 

[Module] 
class MainClass: 
    public static Version as string 

    static def constructor(): 
     Version = "0.1" 

这将编译,但如果我再进入这些命令到booish

import MyLibrary 
print (Version) 

然后我得到 “错误:未知的标识符: '版本'”。

大概这个代码在早期版本的语言中工作。我正在使用0.9.4.9。什么是实现这种效果的正确方法?我注意到有一个隐式静态类MyVersionModule,其中放置了顶级静态方法,但我不知道如何向其添加属性)。

回答

0

在.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)