gpt4 book ai didi

r - 为什么会检查 return 括号后的表达式的词法正确性,但不求值?

转载 作者:行者123 更新时间:2023-12-04 10:58:40 24 4
gpt4 key购买 nike

考虑以下代码:

a = function() {
return (23)
}
b = function() {
return (23) * 23
}
c = function() {
return (23) * someUndefinedVariable
}

以上所有运行成功(如果调用)并返回 23。
我假设 R 忽略了 return 的右括号之后的所有内容。 ,但事实并非如此,因为此代码在代码加载期间失败:
d = function() {
return (23) something
}

我的假设是在后一个例子中,一些词法分析器或解析器失败了。但在前者中,表达式被解析为 (return(23))*some (因为 return 被视为函数),但评估在 return 处停止因此 R 不会试图找到 some .

这听起来好吗?是这个原因吗?这种行为是有意的吗?我可以启用一些警告以便解释器告诉我这种“无法访问的代码”吗?

最佳答案

这段代码的失败:

d = function() {
return (23) something
}

...与之前的代码无关,与无法解析有关: return (23) something .与之前重新定义 c 的错误尝试不同它有一个有效/可解析的函数体, d -body 无法进入功能形式。解析器并没有真正停止在 return(23) 处,而是在它对 something 进行标记之后停止并“意识到”它不是分号或中缀函数名。所以 R 解释器现在有两个表达式,它们之间没有有效的连接器/分隔符。

定义时 R 函数体内的引用对象不会被评估,甚至不会被检查是否存在于参数列表中或函数外。 (R 不是编译器。)

关于r - 为什么会检查 return 括号后的表达式的词法正确性,但不求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29019070/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com