当函数中隐式使用if/else语句而不是显式指定if/else语句中包含的表达式时,我很难理解一些R行为。
这个玩具函数的工作原理和我预期的一样,当收到TRUE
时打印"x is TRUE"
,当收到FALSE
时打印"x is FALSE"
。
f1 <- function(x){
if (x)
print("x is TRUE")
else
print("x is FALSE")
}
> f1(TRUE)
[1] "x is TRUE"
> f1(FALSE)
[1] "x is FALSE"
>
然而,如果我向它添加一个隐式的嵌套if语句,那么它就会停止我所期望的行为。下面的函数应该与上面的函数完全相同,但是如果给它一个FALSE
,它就不会打印任何内容。
f1 <- function(x){
if (x)
if(TRUE)
print("x is TRUE")
else
print("x is FALSE")
}
> f1(TRUE)
[1] "x is TRUE"
> f1(FALSE) # No output?
>
最后,如果我添加括号来指定排列并使if/else显式,它将再次按预期运行:
f1 <- function(x){
if (x){
if (TRUE)
print("x is TRUE")
} else {
print("x is FALSE")
}
}
> f1(TRUE)
[1] "x is TRUE"
> f1(FALSE)
[1] "x is FALSE"
>
在网上搜索这个问题时,我发现了两个模糊相关的答案。一个讨论括号不起作用的问题,但如果括号完全缺失,则不讨论不同的输出,另一个讨论著名的问题“其他”错误中出现意外的“其他”。从他们那里,我了解到R可能将if
语句解释为它自己的行,但我不明白为什么函数或任何其他输出中没有意外的else
抛出错误。
有人能帮我理解R的控制流逻辑吗?
与许多语言一样,R贪婪地将else
附加到最近的if
。因此,您的代码没有按R读取的方式缩进,这是
if (x)
if(TRUE)
print("x is TRUE")
else
print("x is FALSE")
if(TRUE)
语句获取了ther
,并且由于TRUE
为TRUE
,因此永远不会执行ther
。
R中的一个奇怪之处是,如果直接将它们输入到控制台,而不是函数中,它们的行为会有所不同。然后它贪婪地完成语句,所以我上面写的是语法错误:
if (x)
if(TRUE)
print("x is TRUE")
是一个完整的语句,因此将执行它。然后,当您输入else
时,您会得到一个错误,因为else
不允许启动语句。
驱动程序级别的隐式和显式等待之间有什么区别。哪一个是驱动级等待。如果我们在代码中提供隐式和显式等待。哪一个优先。
CLANG6、CLANG7和gcc 7.1、7.2和7.3都同意以下代码是有效的C++17代码,但在C++14和C++11下有歧义。MSVC2015和2017也接受它。然而,即使在C++17模式下,GCC-8.1和8.2也拒绝了它: 接受它的编译器选择模板化的显式转换函数。 拒绝它的编译器同意在以下两个方面存在歧义: null 以下是来自(接受代码)的错误:
我有一些以下模式的文本字符串。 > 此外,我还想捕获之后第一个
我需要通过不在括号中的管道拆分文本。这是示例文本 我在这里找到了这个/\ |(?![^{]*})/g:regex,提取字符串,不要在两个括号之间 现在当我想用管子分割这部分字符串时 它还选择杰森、玛丽亚和圣诞老人之间的管道,因为它们后面有一个开口支架。如果正则表达式不在任何括号中,如何将其更改为仅匹配管道。 测试字符串: 应该返回 . 应该返回
问题内容: 我正在分析其他人的PHP代码,并且注意到输入HTML包含许多隐藏的输入字段,其名称以’[]’结尾,例如: 处理此输入的PHP页面将获取每个值,如下所示: “ []”的作用是什么?指定会有多个具有相同名称的输入字段? 问题答案: 是。基本上,PHP会知道将所有具有相同名称的值粘贴到数组中。 顺便说一下,这适用于所有输入字段,而不仅仅是隐藏的字段。
问题内容: 想要有关对象的某些调试信息时,我曾经使用toString的隐式调用,因为在对象为null的情况下,它不会引发Exception。 例如: 代替: 除了null以外,还有什么区别吗? 如果前者不起作用,后者可以工作吗? 编辑: 在隐式调用的情况下,到底做了什么? 问题答案: 没有什么区别。使用较短且经常使用的那一种。 如果您实际上由于其他原因想要获取对象的字符串值,并且希望它为null友