鉴于text的以下功能:
function f3() {
return Math.random() > 0.5 ? Promise.resolve(true): 'naaah'
}
是否可以编译正则表达式来确定返回类型f3()
调用,而不实际调用该函数?
给定代码,我们无法通过正则表达式确定 this 的返回类型。矛盾证明:
假设我们可以使用正则表达式找到返回类型。
返回类型在最后一行通过非确定性调用决定random
(提前不知道)。
正则表达式是确定性的——在相同的输入上运行时它们总是具有相同的输出。
因此,函数的返回类型必须是静态的,因为我们可以运行正则表达式并找到返回类型(并且该正则表达式将始终返回相同的内容)。
矛盾:函数的返回类型必须是静态的,但函数的返回类型是可变的,因为random
注意:上面假设类型必须是单一类型,并且本身不考虑联合类型。
此外,还证明了为什么我们不能总是做到这一点。
假设我们可以以某种方式找出函数中使用的每种类型。
在某个时刻,我们生成一个字符串a="A"+Math.random()
稍后,我们生成一个字符串b="class "+a+"{...}
在这个定义之后,我们执行c= eval("new "+a+"()")
.
当我们回来时c
,没有正则表达式可以知道类型 - 类型在函数中新命名,随机确定,并且每次执行都不同。
这假设问题是一个更一般的“javascript 正则表达式能否找到通用函数的返回类型”。请注意,如果可以找到返回类型,则可以判断程序已停止(如果不停止则无法返回,如果从不停止则返回类型必须是未定义的),并且停止问题仍然没有解决。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)