ISA(例如,MIPS)和汇编语言之间有什么区别?我看到了一些似乎同义词使用的情境.
这个问题的答案和讨论刺激了这个问题.以下代码段显示了问题的关键:
>>> bool(NotImplemented)
True
Run Code Online (Sandbox Code Playgroud)
我的问题如下:
bool
价值NotImplemented
应该是True
?它感觉是unpythonic.推理为什么我认为它不直观(请忽略缺乏最佳实践):
>>> class A:
... def something(self):
... return NotImplemented
...
>>> a = A()
>>> a.something()
NotImplemented
>>> if a.something():
... print("this is unintuitive")
...
this is unintuitive
Run Code Online (Sandbox Code Playgroud)
具有如此负面含义(缺乏实施)的东西似乎是一种奇怪的行为.
相关文字来自:
未实现
这应该由二进制特殊的方法被返回(如特殊的值
__eq__()
,__lt__()
,__add__()
,__rsub__()
,等等),以指示该操作不相对于另一种类型的实施; 可通过就地二进制特殊的方法(例如被返回__imul__()
,__iand__()
为了相同的目的,等等).它的真实价值是真实的.- 来自Python Docs
为了澄清我的立场,我觉得NotImplemented
能够评估一个布尔值本身就是一种反模式.我觉得Exception更有意义,但流行的想法是在评估不同对象之间的比较时,出于性能原因选择常量单例.我想我正在寻找令人信服的理由,为什么这是选择的"方式".
我更频繁地使用受歧视工会 (DU),并且越来越喜欢它们。然而,我确实有一个问题似乎无法解决。如果您内联 DU 的布尔检查,则可以依靠 TypeScript (TS) 自动推断类型。但是,如果提取布尔检查,TS 就无法再缩小到 DU 的特定子类型。我\xe2\x80\x99m知道类型保护,但我\xe2\x80\x99d想知道为什么编译器\xe2\x80\x99不支持提取的在线检查,特别是。
\n\n这是一个已知的限制吗?我应该提交错误/功能请求吗?
\n\n示例如下(带有TypeScript Playground Link):
\n\ntype A = { type: "A"; foo: number };\ntype B = { type: "B"; bar: string };\ntype DU = A | B;\n\nconst checkIt = (it: DU) => {\n const extractedCheck = it.type === "A";\n\n if (extractedCheck) {\n // it does not get narrowed\n console.log(it.foo); // Error: Property \'foo\' does not exist on type \'DU\'.\n }\n\n if (it.type === "A") {\n // …
Run Code Online (Sandbox Code Playgroud)