在Ruby中,您可以轻松地为变量设置默认值
x ||= "default"
Run Code Online (Sandbox Code Playgroud)
如果x为nil或false,则上述语句将x的值设置为"default"
在PHP中是否有类似的快捷方式,或者我必须使用更长的形式:
$x = (isset($x))? $x : "default";
Run Code Online (Sandbox Code Playgroud)
有没有更简单的方法来处理PHP?
tl; dr:C++中是否存在非短路逻辑AND(类似于&&)?
我有两个我想调用的函数,并使用返回值来计算第三个复合函数的返回值.问题是我总是希望评估两个函数(因为它们输出有关系统状态的日志信息)
IE:
bool Func1(int x, int y){
if( x > y){
cout << "ERROR- X > Y" << endl;
}
}
bool Func2(int z, int q){
if( q * 3 < z){
cout << "ERROR- Q < Z/3" << endl;
}
}
bool Func3(int x, int y, int z, int q){
return ( Func1(x, y) && Func2(z, q) );
}
Run Code Online (Sandbox Code Playgroud)
当然,条件语句是不是在功能那么简单,是的,我知道我可以使用临时变量来存储的两个函数的返回,接着做临时变量"短路"的逻辑,但我想知道是否有一个"优雅"的语言解决方案来保持Func3中的单行返回,同时仍然从两个函数获取日志消息.
答复摘要:
"按位"运算符| 和&可用于获得效果,但仅当返回类型为bool时.我在ANSI C++规范中没有提到这一点.从我可以告诉,这个工程因为"布尔"被转换为int(真= 1,假= 0),然后将位运算符时,则转换回一个布尔值.
也可以使用运算符" +"和" *".这在ANSI C++规范中没有提到,但可能因为与上述相同的原因而起作用." +"给"或"因为true被转换为1,然后除了0之外的任何东西都被转换回true." *"适用于"和"因为1(真)*0(假)== 0(假)和1(真)*1(真)== …
当我在 Visual\xc2\xa0Studio\xc2\xa02019 的 C++ 控制台应用程序中使用以下最少代码时,我收到两个完全相反的警告。
\nint main()\n{\n unsigned char op1 = 0x1;\n unsigned char op2 = 0x3;\n unsigned char result1 = op1 | op2;\n unsigned char result2 = op1 || op2;\n}\nRun Code Online (Sandbox Code Playgroud)\n警告unsigned char result1 = op1 | op2;是
\n\nlnt-逻辑按位不匹配 当可能需要逻辑“||”时使用按位“|”。
\n
警告unsigned char result2 = op1 || op2;是
\n\nlnt-逻辑按位不匹配 当可能需要按位“||”时使用逻辑“||”。
\n
这有点好奇。
\n我的目的是使用按位运算符。我如何更改该行unsigned char result1 = op1 | op2;,以便 Visual\xc2\xa0Studio\xc2\xa02019 警告消失?
该警告不是来自编译器;而是来自编译器。输出没有错误。\n可能它来自ReSharper C++ …
我正在使用Ruby on Rails,并希望验证两种不同的模型:
if (model1.valid? && model2.valid?)
...
end
Run Code Online (Sandbox Code Playgroud)
但是,"&&"运算符使用短路评估(即仅当"model1.valid?"为真时才评估"model2.valid?"),这会阻止在model1无效时执行model2.valids.
是否存在不会使用短路评估的等效"&&"?我需要评估两个表达式.
我正在学习Java,来自C,我发现这种boolean类型的语言之间有一个有趣的区别.在C中没有bool/ ean所以我们需要使用数字类型来表示布尔逻辑(0 == false).
我想在Java中不起作用:
int i = 1;
if (i)
System.out.println("i is true");
Run Code Online (Sandbox Code Playgroud)
也没有通过类型转换来改变条件:
if ((boolean)i)
Run Code Online (Sandbox Code Playgroud)
除了做以下事情之外:
if ( i != 0 )
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以对int类型进行C-ish逻辑检查吗?只是想知道是否有任何Java技巧允许非布尔类型的布尔逻辑像这样.
编辑:
上面的例子非常简单,并使自己适应狭隘的思维范围.当我最初问这个问题时,我也在考虑函数调用的非布尔返回.例如Linux fork()调用.它本身不会返回int,但我可以很好地使用条件的数字返回值,如:
if( fork() ) {
// do child code
Run Code Online (Sandbox Code Playgroud)
这允许我处理子项的条件中的代码,而不是为父项处理代码(或者对于错误的负返回结果).
所以我目前还不知道足够的Java给出一个好的"Java"示例,但那是我最初的意图.
我正在观看2007年关于高级Python或理解Python的视频,并且在18'27"发言者声称"有些人可能知道在Python中and并or返回两个值中的一个,而not返回总是一个布尔值."这是什么情况下的情况?
据我所知,and并or返回布尔.
是否&& ||保证逻辑运算符()的从左到右的评估?
假设我有这个:
SDL_Event event;
if (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT) {
// do stuff
}
}
Run Code Online (Sandbox Code Playgroud)
这保证与此相同吗?
SDL_Event event;
if (SDL_PollEvent(&event) && event.type == SDL_QUIT) {
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
这也很重要,假设我们有两个要求,a并且b.因此,要求a更有可能失败b.然后说它if (a && b)比说更有效率if (b && a).
这是一个矢量
a <- c(TRUE, FALSE, FALSE, NA, FALSE, TRUE, NA, FALSE, TRUE)
Run Code Online (Sandbox Code Playgroud)
我想要一个简单的函数,TRUE每当有一个TRUE"a"时返回,并且FALSE每次有一个FALSE或一个NA在"a"中.
以下三件事情无效
a == TRUE
identical(TRUE, a)
isTRUE(a)
Run Code Online (Sandbox Code Playgroud)
这是一个解决方案
a[-which(is.na(a))]
Run Code Online (Sandbox Code Playgroud)
但它似乎不是一个简单易行的解决方案
还有其他解决方案吗?
以下是我所知道的一些函数(和运算符):
identical()
isTRUE()
is.na()
na.rm()
&
|
!
Run Code Online (Sandbox Code Playgroud)
有什么其他功能(运营商,技巧,什么的,......),它们处理非常有用TRUE,FALSE,NA,NaN?
NA和之间有什么区别NaN?
是否有其他"顺理成章之事"比TRUE,FALSE,NA和NaN?
非常感谢 !
我正在寻找一个通用的正则表达式构造来匹配模式中的所有内容x EXCEPT匹配模式y.这很难完全和简洁地解释......请参阅Material Nonimplication以获得正式定义.
例如,匹配任何单词字符(\w)除了'p'.注意我从一个较大的集合(所有单词字符)中减去一个小集合(字母'p').我不能只是说,[^p]因为这没有考虑到只有单词字符的更大限制集.对于这个小例子,当然,我可以手动重建类似的东西[a-oq-zA-OQ-Z0-9_],这是一种痛苦但可行的.但我正在寻找一个更通用的结构,以便至少大的正集可以是一个更复杂的表达式.喜欢匹配,((?<=(so|me|^))big(com?pl{1,3}ex([pA]t{2}ern)除非它以"我的"开头.
编辑:我意识到这是一个不好的例子,因为在开始或结束时排除东西是负面前瞻和后视表达式工作的情况.(波希米亚人,我仍然给你一个赞成说明这一点).那么......在中间的某个地方排除包含"我的"的匹配怎么样?...我仍然在寻找一个通用的构造,就像一个正则表达式相当于下面的伪sql
select [captures] from [input]
where (
input MATCHES [pattern1]
AND NOT capture MATCHES [pattern2]
)
Run Code Online (Sandbox Code Playgroud)
如果答案是"它不存在,这就是为什么......"我也想知道这一点.
编辑2:如果我想定义自己的函数来执行此操作,那就像(这里是C#LINQ版本):
public static Match[] RegexMNI(string input,
string positivePattern,
string negativePattern) {
return (from Match m in Regex.Matches(input, positivePattern)
where !Regex.IsMatch(m.Value, negativePattern)
select m).ToArray();
}
Run Code Online (Sandbox Code Playgroud)
我仍然只是想知道是否有一个本机正则表达式构造可以做到这一点.
问题设置简介
我在做一些涉及基准- ~A和A==0一double array with no NaNs,两者都转换A为逻辑阵列,所有zeros被转换为true值和休息被设置为false值.
对于基准测试,我使用了三组输入数据 -
15:5:100 50:40:1000 200:400:3800输入是使用A = round(rand(N)*20),其中N是从size数组中获取的参数.因此,N会从变化15 to 100 with stepsize of 5为所述第一组和类似地对于第二和第三组.请注意,我将datasize定义为N,因此元素的数量将是datasize ^ 2或N ^ 2.
基准代码
N_arr = 15:5:100; %// for very small to small sized input array
N_arr = 50:40:1000; %// for small to medium sized input array
N_arr = 200:400:3800; %// for medium …Run Code Online (Sandbox Code Playgroud)