为什么要switch在一系列if语句中使用块?
switch 语句似乎做同样的事情,但需要更长的时间来输入.
考虑以下两个带括号的片段:
switch (var) {
case FOO: {
x = x + 1;
break;
}
case BAR: {
y = y + 1;
break;
}
}
Run Code Online (Sandbox Code Playgroud)
没有括号:
switch (var) {
case FOO:
x = x + 1;
break;
case BAR:
y = y + 1;
break;
}
Run Code Online (Sandbox Code Playgroud)
我知道,在带括号的代码段中,通过将每个案例括在大括号中来创建一个新的范围.但是,如果每个案例都不需要新范围(即没有重用变量名称),那么在案例中使用大括号是否存在任何性能损失?
我知道我可以编写一个Ruby case语句来检查正则表达式的匹配.但是,我想在return语句中使用匹配数据.像这样的半伪代码:
foo = "10/10/2011"
case foo
when /^([0-9][0-9])/
print "the month is #{match[1]}"
else
print "something else"
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
谢谢!
请注意:我理解我不会像上面那样对一个简单的情况使用switch语句,但这只是一个例子.实际上,我想要实现的是将许多潜在的正则表达式匹配为可以用各种方式编写的日期,然后相应地使用Ruby的Date类进行解析.
我试过谷歌这个,但没有运气.
我有一个非常大的转变,有些情况显然比其他情况更常见.
因此,我想知道订单是否真的保持不变,"上"案例在"较低"之前进行测试,因此评估得更快.
我想保留我的订单,但如果它伤害速度,那么重新排序分支将是一个好主意.
例如:
switch (mark) {
case Ion.NULL:
return null;
case Ion.BOOLEAN:
return readBoolean();
case Ion.BYTE:
return readByte();
case Ion.CHAR:
return readChar();
case Ion.SHORT:
return readShort();
case Ion.INT:
return readInt();
case Ion.LONG:
return readLong();
case Ion.FLOAT:
return readFloat();
case Ion.DOUBLE:
return readDouble();
case Ion.STRING:
return readString();
case Ion.BOOLEAN_ARRAY:
return readBooleans();
case Ion.BYTE_ARRAY:
return readBytes();
case Ion.CHAR_ARRAY:
return readChars();
case Ion.SHORT_ARRAY:
return readShorts();
case Ion.INT_ARRAY:
return readInts();
case Ion.LONG_ARRAY:
return readLongs();
case Ion.FLOAT_ARRAY:
return readFloats(); …Run Code Online (Sandbox Code Playgroud) 在某些时候,我工作副本中的所有文件都标有"S"符号,如下所示:
$ svn st
M S AclController.php
S InstallationController.php
S CustomerController.php
S RedirController.php
S IndexController.php
S LoginController.php
S OrderController.php
S ProductController.php
S SelfInstallController.php
S SelfcareController.php
Run Code Online (Sandbox Code Playgroud)
有趣的是,它只发生在这个特定的工作副本中 - 当我将项目签出到新目录时,它不会显示"S"标记.
如何摆脱这个烦人的"S"符号?它显着降低了WC状态的清晰度.
更新:我使用标准svn switch语法不时切换.直到最近才出现这个"S"符号.用于切换的命令是:
svn switch svn+ssh://xxxxxx/subversion/xxxxxxx/releases/1.0.16 .
Run Code Online (Sandbox Code Playgroud)
有什么办法可以清除"S"旗吗?
我正在尝试在类似于下面所示的函数中使用多个案例,以便我能够使用 python 3.10 中的匹配案例来执行多个案例
def sayHi(name):
match name:
case ['Egide', 'Eric']:
return f"Hi Mr {name}"
case 'Egidia':
return f"Hi Ms {name}"
print(sayHi('Egide'))
Run Code Online (Sandbox Code Playgroud)
即使我删除了方括号,这只是返回None而不是消息。
我试图做这样的事情,即在switch语句中使用数组.在Java中有可能吗?如果不是,请解释可能的解决方案.
boolean[] values = new boolean[4];
values[0] = true;
values[1] = false;
values[2] = false;
values[3] = true;
switch (values) {
case [true, false, true, false]:
break;
case [false, false, true, false]:
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud) 我想在R语句中使用我的函数switch()来根据函数参数的值触发不同的计算.
例如,在Matlab中你可以通过写作来做到这一点
switch(AA)
case '1'
...
case '2'
...
case '3'
...
end
Run Code Online (Sandbox Code Playgroud)
我发现这个post- switch()语句用法 - 解释了如何使用switch,但对我来说并没有真正帮助,因为我想执行更复杂的计算(矩阵运算)而不是简单mean.
以下是Sun Java教程的摘录:
一种开关用的工作原理
byte,short,char,和int原始数据类型.它还与枚举类型(在类和继承讨论)和少数特殊类作品是"包装"某些基本类型:Character,Byte,Short,和Integer(在简单的数据对象讨论).
必须有一个很好的理由为什么long不允许原始数据类型.有人知道这是什么吗?
在C中有一个switch构造,它使一个人能够根据一个测试整数值执行不同的条件代码分支,例如,
int a;
/* Read the value of "a" from some source, e.g. user input */
switch ( a ) {
case 100:
// Code
break;
case 200:
// Code
break;
default:
// Code
break;
}
Run Code Online (Sandbox Code Playgroud)
如何为字符串值获得相同的行为(即避免所谓的" if- else阶梯"),即char *?
switch-statement ×10
java ×4
arrays ×1
c ×1
long-integer ×1
match ×1
performance ×1
python ×1
python-3.10 ×1
r ×1
regex ×1
ruby ×1
status ×1
svn ×1