有没有办法将方法标记为待在Pharo中实施?

sir*_*exy 6 smalltalk pharo

只是想知道是否可以将方法标记为待在pharo中实现,就像您可以在Java中使用“ todo”一样

如果没有这样的东西,我真的很难跟踪到pharo的完成情况

Lea*_*lia 11

仍待执行的方法应发送如下notYetImplemented消息:

methodImNotSureHowToImplement
  ^self notYetImplemented
Run Code Online (Sandbox Code Playgroud)

如果仍然发送未实现的消息,它将发出一个NotYetImplemented异常,该异常将知道有问题的选择器,#methodImNotSureHowToImplement在我的示例中。

还要注意,这将使查找所有需要作为的发送者的方法变得容易#notYetImplemented

#notYetImplemented由于存在,的实现非常简单NotYetImplemented

notYetImplemented
  "Announce that this message is not yet implemented"
   NotYetImplemented signalFor: thisContext sender selector
Run Code Online (Sandbox Code Playgroud)

还要注意,这NotYetImplemented是其子类之一,可对SelectorException几种类似情况进行建模:

SelectorException
  NotYetImplemented
  PrimitiveFailed
  ShouldBeImplemented
  ShouldNotImplement
  SubclassResponsibility
Run Code Online (Sandbox Code Playgroud)


sir*_*exy 1

在询问后两天,我自己找到了解决方案,几乎是偶然的,只是使用上下文菜单选项jump to test method而不是任何测试的方法。Pharo 自动生成一个空测试,如下所示:

self flag: #toImplement.
self assert: false`
Run Code Online (Sandbox Code Playgroud)

第一行不仅可以在测试中使用,它给了我预期的行为,因为它自动将包含它的方法分类在标有 flags大号的类别中"!",可以轻松地一目了然地检查哪些方法正在挂起。

第二行强制测试失败并显示为黄色,这非常有用,因为如果它为空,它将通过并显示为绿色,可能会导致相信它已经完成,但事实并非如此。只需使用即可实现类似的效果 self notYetImplemented

我可能会开始用我不完整的方法做这样的事情:

MyIncompleteMethod

  self flag: #toImplement.  
  self notYetImplemented.`
Run Code Online (Sandbox Code Playgroud)