检查是否存在 class

Checking for the presence of a class

我想检查是否已加载特定的 class。

Smalltalk at: #TabularXSLXExport  ifNone: [ ]

这不会导致 Pharo 的结果。我该怎么做呢?

我认为您正在寻找的方法是 #at:ifAbsent:(而不是 #at:ifNone:)。

所以,检查

的结果
Smalltalk at: #String ifAbsent: [ nil ]

将让您检查 String class,而

Smalltalk at: #Strign ifAbsent: [ nil ]

将在 nil 上打开一个检查器(请注意 "Strign" 是 "String" 的故意拼写错误,因此查找失败)。

Edit:正如 Max Leske 在评论中指出的那样,如果您只是想确定 class 存在,并且对返回的 class 本身不感兴趣。

您可能想为此做一个扩展方法,或者使用 pragma 来收集所有 'exports',或者注册这个功能。世界菜单使用 pragma <worldMenu>。目录浏览器这样使用它:

CatalogBrowser class>>menuCommandOn: aBuilder 
"Add a custom menu item to the world menu"  
<worldMenu> 

(aBuilder item: #'Catalog Browser')
        order: 0.19; 
      icon: Smalltalk ui icons catalogIcon;  
        parent: #'Tools';
        action: [ self open ].

查看 PragmaMenuBuilder 了解其工作原理

在 Pharo4 中,即 MetacelloConfigurationBrowser:

MetacelloConfigurationBrowser class>>menuCommandOn: aBuilder  
<worldMenu>

(aBuilder item: 'Configuration Browser')
    parent: #Tools;
    order: 0.20;
    action: [self new openWithSpec]; 
    icon: Smalltalk ui icons configIcon