标签: switch-statement

切换语句中的字符串:'String'不符合协议'IntervalType'

我在Swift的switch语句中使用字符串时遇到问题.

我有一个字典叫做opts声明<String, AnyObject>

我有这个代码:

switch opts["type"] {
case "abc":
    println("Type is abc")
case "def":
    println("Type is def")
default:
    println("Type is something else")
}
Run Code Online (Sandbox Code Playgroud)

并在线上case "abc",case "def"我得到以下错误:

Type 'String' does not conform to protocol 'IntervalType'
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释我做错了什么吗?

string switch-statement swift

39
推荐指数
5
解决办法
4万
查看次数

如何使用存储在变量中的值作为案例模式?

我正在尝试了解Python 3.10 中新的结构模式匹配语法。我知道可以匹配这样的文字值:

def handle(retcode):
    match retcode:
        case 200:
            print('success')
        case 404:
            print('not found')
        case _:
            print('unknown')

handle(404)
# not found
Run Code Online (Sandbox Code Playgroud)

但是,如果我重构并将这些值移动到模块级变量,则会导致错误,因为语句现在表示结构或模式而不是值:

SUCCESS = 200
NOT_FOUND = 404

def handle(retcode):
    match retcode:
        case SUCCESS:
            print('success')
        case NOT_FOUND:
            print('not found')
        case _:
            print('unknown')

handle(404)
#  File "<ipython-input-2-fa4ae710e263>", line 6
#    case SUCCESS:
#         ^
# SyntaxError: name capture 'SUCCESS' makes remaining patterns unreachable
Run Code Online (Sandbox Code Playgroud)

有没有办法使用 match 语句来匹配存储在变量中的值?

python switch-statement python-3.x python-3.10 structural-pattern-matching

39
推荐指数
4
解决办法
4483
查看次数

捕获使剩余模式无法访问

为什么这段代码会失败:

OKAY = 200
NOT_FOUND = 404
INTERNAL_SERVER_ERROR = 500

match status:
    case OKAY:
        print('It worked')
    case NOT_FOUND:
        print('Unknown')
    case INTERNAL_SERVER_ERROR:
        print('Out of service')
    case _:
        print('Unknown code')
Run Code Online (Sandbox Code Playgroud)

它会生成以下错误消息:

  File "/Users/development/Documents/handler.py", line 66
    case OKAY:
         ^^^^
SyntaxError: name capture 'OKAY' makes remaining patterns unreachable
Run Code Online (Sandbox Code Playgroud)

该错误消息意味着什么以及如何修复代码以使其正常工作?

python syntax-error switch-statement python-3.10 structural-pattern-matching

39
推荐指数
1
解决办法
1万
查看次数

在返回的情况下中断..并且默认情况下

我的OCD使我在编写case语句时添加"break",即使它们不会被执行.请考虑以下代码示例:

switch(option) {
    case 1:
        a = 1;
        b = 7;
        break;
    case 2:
        a = 2;
        b = 4;
        return (-1);
        break;
    default:
        a = -1;
        break;
}
Run Code Online (Sandbox Code Playgroud)

我的两个问题是:
对于"案例2:",我真的不需要休息,但是无论如何将它放在那里是一个好主意吗?对于"默认:".这纯粹是强迫症,还是有任何真正的理由在这里休息?

c coding-style switch-statement

38
推荐指数
3
解决办法
3万
查看次数

切换情况有条件

我写的是正确的开关盒吗?

var cnt = $("#div1 p").length;
                alert(cnt);
                switch (cnt) {
                    case (cnt >= 10 && cnt <= 20):
                        alert('10');
                        break;
                    case (cnt >= 21 && cnt <= 30):
                       alert('21');
                        break;
                    case (cnt >= 31 && cnt <= 40):
               alert('31');
                        break;
                    default:
                        alert('>41');
                }
Run Code Online (Sandbox Code Playgroud)

出于某种原因,条件匹配时不会发出警报!

javascript jquery switch-statement

38
推荐指数
6
解决办法
23万
查看次数

如何在C++中的switch语句中使用枚举值

我想enum为一个switch语句使用一个值.是否可以使用所enum包含的值"{}"作为switch()"?我知道switch()需要一个integer值才能将编程流程指向适当的case数字.如果是这种情况,我是否只为每个常量创建一个变量在enum声明中?我还希望用户能够选择并将该选择传递给switch()语句.

例如:

cout << "1 - Easy, ";
cout << "2 - Medium, ";
cout << "3 - Hard: ";

enum myChoice { EASY = 1, MEDIUM = 2, HARD = 3 };

cin >> ????

switch(????)
{
case 1/EASY:  // (can I just type case EASY?)
    cout << "You picked easy!";
    break;

case 2/MEDIUM: 
    cout << "You picked medium!"; …
Run Code Online (Sandbox Code Playgroud)

c++ enums switch-statement

38
推荐指数
5
解决办法
12万
查看次数

带开关的Android编码(String)

我在eclipse上开发一个Android应用程序,当我尝试一些类似的代码

switch(String){
 ......
}
Run Code Online (Sandbox Code Playgroud)

它给我以下错误

Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
Run Code Online (Sandbox Code Playgroud)

所以我将编译器更改为1.7,然后它给了我另一个错误

Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.
Run Code Online (Sandbox Code Playgroud)

那么,有没有让switch(String)在Android应用程序中工作?或者我别无选择只能使用

if(){}
else if(){}
else if(){}
........
Run Code Online (Sandbox Code Playgroud)

java string android switch-statement

38
推荐指数
4
解决办法
5万
查看次数

为什么这个转到这个开关里面不起作用?

对于这个程序:

class Program
{
    static void Main(string[] args)
    {
        var state = States.One;
        switch (state)
        {
            case States.One:
                Console.WriteLine("One");
                break;
            case States.Zero:
                goto case States.One;
        }
    }
}

public enum States : ulong
{
    Zero = 0,
    One = 1,
}
Run Code Online (Sandbox Code Playgroud)

我有:

"switch表达式或case标签必须是bool,char,string,integral,enum或相应的可空类型"

state变量是enum类型.如果我评论该goto case行,错误就会消失.

我正在使用VS 2013. + .NET 4.5.1.

c# switch-statement

38
推荐指数
2
解决办法
2686
查看次数

为什么此代码中的枚举开关需要默认值?

通常,switch语句中不需要default.但是,在以下情况下,代码只有在取消注释默认语句时才能成功编译.谁能解释为什么?

public enum XYZ {A,B};
public static String testSwitch(XYZ xyz)
{
    switch(xyz)
    {
    case A:
        return "A";
    case B:
    //default:
        return "B";
    }
}
Run Code Online (Sandbox Code Playgroud)

java enums default switch-statement

37
推荐指数
4
解决办法
2万
查看次数

php switch case语句来处理范围

我正在解析一些文本并根据一些规则计算权重.所有角色都具有相同的重量.这会使switch语句真的很长,我可以在case语句中使用范围.

我看到了一个提倡关联数组的答案.

$weights = array(
[a-z][A-Z] => 10,
[0-9] => 100,
['+','-','/','*'] => 250
);
//there are more rules which have been left out for the sake of clarity and brevity
$total_weight = 0;
foreach ($text as $character)
{
  $total_weight += $weight[$character];
}
echo $weight;
Run Code Online (Sandbox Code Playgroud)

实现这样的目标的最佳方法是什么?是否有类似于PHP中的bash case语句?当然,在关联数组或switch语句中写下每个字符都不是最优雅的解决方案,还是唯一的替代方案?

php range switch-statement

37
推荐指数
2
解决办法
5万
查看次数