在boo中声明全局变量



据我所知,以下代码应该编译成一个具有顶级属性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)

相关内容

  • 没有找到相关文章

最新更新