我尝试用Q#编写算法。在某些情况下,该算法无法计算出成功的结果,因为用户传递了一些错误的参数。在这种情况下,我想引发异常,现在我想知道:是否有可能在Q#中引发并捕获异常?
如果是:我该怎么做?Q#中异常处理的正确方法是什么?
如果没有:为什么?有什么解决方法吗?
答案 0 :(得分:2)
在catch
子句在通用语言中特别有用的许多情况下,它们看起来有点像处理I / O错误,因为它们很难通过普通的流控制来预测和处理。相比之下,Q#程序的执行意图是可预测的,因此像Adjoint
和Controlled
这样的函子可以生成程序的适当转换,作为较大量子算法的一部分。
这就是说,正如您所指出的,在某些情况下,有时人们可能无法明智地前进。因此,Q#提供了一个fail
语句,该语句的操作类似于throw
语句(但是使用了String
而不是异常对象),但没有提供与{{1 }} – try
块。 catch
语句旨在与Q#程序无法明智地继续进行的C#主机程序进行通信,并且在诸如用户传递错误实例的情况下非常有用。例如,在标准库中的整个Facts.qs
文件中都使用它来实现经典的断言功能,例如EqualityWithinToleranceFact
:
fail