检查是否存在 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
我想检查是否已加载特定的 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