鉴于以下功能的文字:
function f3() {
return Math.random() > 0.5 ? Promise.resolve(true): 'naaah'
}
Run Code Online (Sandbox Code Playgroud)
是否可以编译正则表达式来确定f3()调用的返回类型,而不实际调用该函数?
Del*_*oth 11
给定代码,我们无法通过正则表达式确定此返回类型.矛盾证明:
假设我们可以使用正则表达式找到返回类型.
返回类型在最后一行中通过非确定性调用决定random(事先不知道).
正则表达式是确定性的 - 当在相同的输入上运行时,它们总是具有相同的输出.
因此,函数的返回类型必须是静态的,因为我们可以运行正则表达式并找到返回类型(并且该正则表达式将始终返回相同的内容).
矛盾:函数的返回类型必须是静态的,但函数的返回类型是可变的 random
注意:以上假设类型必须是单一类型,并且不会单独考虑Union类型.
另外,证明我们为什么总是不能这样做.
假设我们可以某种方式找出函数中使用的每种类型.
在某些时候,我们生成一个字符串 a="A"+Math.random()
稍后,我们生成一个字符串 b="class "+a+"{...}
在这个定义之后,我们执行c= eval("new "+a+"()").
当我们返回时c,没有正则表达式可以知道类型 - 函数中新命名的类型,随机确定并且对于每次执行都是不同的.
这假设问题是更一般的"可以javascript正则表达式找到泛型函数的返回类型." 请注意,如果可以找到返回类型,则可以告诉程序暂停(如果它没有停止则无法返回,如果它永远不会停止则返回类型必须是未定义的),停止问题仍未解决.
| 归档时间: |
|
| 查看次数: |
388 次 |
| 最近记录: |