标签: fall-through

测试交换机中的多个案例,如OR(||)

switch case当你需要在同一个案例中测试a b时,你将如何使用?

switch (pageid) {
  case "listing-page" || "home-page":
    alert("hello");
    break;
  case "details-page":
    alert("goodbye");
    break;
}
Run Code Online (Sandbox Code Playgroud)

javascript switch-statement fall-through

222
推荐指数
4
解决办法
13万
查看次数

为什么即使我使用[[fallthrough]],GCC也会警告我一个漏洞?

在下面的代码中,我使用[[fallthrough]]C++ 1z中的标准属性来记录需要的漏洞:

#include <iostream>

int main() {
    switch (0) {
        case 0:
            std::cout << "a\n";
            [[fallthrough]]
        case 1:
            std::cout << "b\n";
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用GCC 7.1,代码编译时没有错误.但是,编译器仍然警告我一个问题:

warning: this statement may fall through [-Wimplicit-fallthrough=]
    std::cout << "a\n";
    ~~~~~~~~~~^~~~~~~~
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ switch-statement fall-through c++17

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

GCC编译器是否应该为这个涉及[[fallthrough]]属性的不正确的C++代码进行诊断?

我正在GCC编译器版本7.1.0上测试C++ 17的功能.这与fallthrough属性有关,以下示例(实例)在此处改编自在线CPP参考

#include "iostream"
using namespace std;

int f(int n) {

  switch (n) {
    case 1:
    case 2:
      n = n + 20;
     [[fallthrough]];
    case 3: // no warning on fallthrough      
      n = n + 30;
    case 4: // compiler may warn on fallthrough      
      [[fallthrough]]; // ill­formed, not before a case label
      //n = n + 40;  //commented out to test if compiler will warn.
  }
  return n;
}    

int main()
{
    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ gcc gcc-warning fall-through c++17

12
推荐指数
1
解决办法
450
查看次数

Duff的设备在Swift中

我们知道Duff的设备使用隔行开关和循环的结构交错,如:

send(to, from, count)
register short *to, *from;
register count;
{
    register n = (count + 7) / 8;
    switch (count % 8) {
    case 0: do { *to = *from++;
    case 7:      *to = *from++;
    case 6:      *to = *from++;
    case 5:      *to = *from++;
    case 4:      *to = *from++;
    case 3:      *to = *from++;
    case 2:      *to = *from++;
    case 1:      *to = *from++;
            } while (--n > 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在Swif 2.1中,当我们在Swift文档中读到时,switch-case控制流并没有隐含地落后:

没有隐含的堕落 …

c switch-statement fall-through duffs-device swift

9
推荐指数
1
解决办法
428
查看次数

使用 Fallthrough 时,bash 是否有与 case 语句等效的“default”?

case "$action" in
a|b)
    echo for a or b
;;&
b|c)
    echo for c or b
;;&
*)
    echo for everything ELSE
;;&
esac
Run Code Online (Sandbox Code Playgroud)

因此,正如您所看到的,我使用的;;&是而不是;;ifaction=b它将触发前两种情况。
然而,这样做的一个缺点是*)不再“意味着”“其他一切”,而是匹配“一切”;因此b也会触发最后一个。

PowerShell能够做我想做的事情,因为它有一个专用的default关键字,Bash有类似的东西吗?
诸如详尽的解决方法之类的怎么[!(a|b|c)])样?

做类似的事情会很方便case 5 in 4) echo bob; ;;& esac || echo DEFAULT,但case似乎不会返回任何代码。

bash switch-statement fall-through

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

Rust 中带有失败的 C 风格 switch 语句

Rust 中的match只执行一只手臂。我从 Murmurhash 3 中找到了这段代码片段

switch(len & 15)
{
  case 15: k2 ^= ((uint64_t)tail[14]) << 48;
  case 14: k2 ^= ((uint64_t)tail[13]) << 40;
  case 13: k2 ^= ((uint64_t)tail[12]) << 32;
  case 12: k2 ^= ((uint64_t)tail[11]) << 24;
  case 11: k2 ^= ((uint64_t)tail[10]) << 16;
  case 10: k2 ^= ((uint64_t)tail[ 9]) << 8;
  case  9: k2 ^= ((uint64_t)tail[ 8]) << 0;
           k2 *= c2; k2  = ROTL64(k2,33); k2 *= c1; h2 ^= k2;

  case  8: k1 ^= …
Run Code Online (Sandbox Code Playgroud)

match switch-statement fall-through rust

7
推荐指数
0
解决办法
1553
查看次数

是否可以使用|| 在PHP中切换?

switch ($foo)
    {
        case 3 || 5:
           bar();
        break;

        case 2:
          apple();
        break;
    }
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,第一个switch语句是否有效?bar()如果值为$foo3或5,我希望它调用该函数

php switch-statement fall-through

5
推荐指数
3
解决办法
500
查看次数

使用switch case语句在fizzbuzz上混淆输出

这里着名的"fizz buzz"程序在Go中使用switch/case和if/else条件.问题是使用switch/case会产生意外的输出,而if/else(具有相同的条件)工作正常.我知道golang中的switch/case与其他C系列语言不同,但是这个代码片段有什么问题?

func main() {
const (
    FIZZ = 3
    BUZZ = 5
)

//section with switch/case gives unexpected output
for i := 1; i <= 30; i++ {
    switch {
    case i % FIZZ == 0:
        fmt.Printf("%d fizz\t", i%3)
        fallthrough
    case i % BUZZ == 0:
        fmt.Printf("%d buzz\t", i%5)
    }
    fmt.Printf("\t%d\n", i)
}

fmt.Printf("now towards the if/else\n")

//section with if/else works as expected
for i := 1; i <= 30; i++ {
    if i % FIZZ == 0 { …
Run Code Online (Sandbox Code Playgroud)

conditional fizzbuzz go fall-through

5
推荐指数
1
解决办法
1476
查看次数

golang 的失败似乎出乎意料

我有以下代码:

package main

import (
    "fmt"
)

func main() {
    switch {
    case 1 == 1:
        fmt.Println("1 == 1")
        fallthrough
    case 2 == 1:
        fmt.Println("2 == 1")
    }
}
Run Code Online (Sandbox Code Playgroud)

在 go 操场上打印两行 -请参阅此处的示例。我本来希望 fallthrough 语句包括对下一个case语句的评估,但情况似乎并非如此。

当然,我总是可以使用一堆if语句,所以这不是一个真正的障碍,但我很好奇这里的意图是什么,因为在我看来这不是一个明显的结果。

有人愿意解释吗?例如:在这段代码中,我怎样才能让第 1 和第 3 种情况执行?

go switch-statement fall-through

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

落在模式匹配中

目前在c#7(版本15.3.4)中,以下代码对编译有效,但两个变量都是合法不可用的.

switch(fruit)
{
    case Apple apple:
    case Orange orange:
    // impossible to use apple or orange
    break;
    case Banana banana:
    break;
}
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用它们,则会得到熟悉的错误,在访问之前可能无法初始化变量.

有时在模式匹配中,您不关心确切的类型,只要该类型属于您想要的类别.这里只以苹果和橘子为例.

List<Fruit> applesAndOranges = new List<Fruit>();
switch(fruit)
{
    case Fruit X when X is Apple || X is Orange:
    applesAndOranges.Add(X);
    break;
    case Banana banana:
    break;
}
Run Code Online (Sandbox Code Playgroud)

有更好的方法吗?

c# pattern-matching switch-statement fall-through c#-7.0

5
推荐指数
1
解决办法
548
查看次数