AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76984798
Accepted
Brass P.
Brass P.
Asked: 2023-08-27 04:49:15 +0800 CST2023-08-27 04:49:15 +0800 CST 2023-08-27 04:49:15 +0800 CST

避免在一系列条件中重复相同的变量

  • 772

我有一个带有条件的脚本和一堆使用相同变量的检查。与此类似的东西:

my $size = "123B";
say "OK" if $size ~~ Str && $size.ends-with("B") && $size.chop >= 0;

是否可以以一种避免重复的方式重写该行$size?我想到了类似交汇点的东西,但我不知道如何应用到它。或者也许是其他东西,但离我的线更短。

raku
  • 2 2 个回答
  • 75 Views

2 个回答

  • Voted
  1. Best Answer
    jubilatious1
    2023-08-27T05:06:45+08:002023-08-27T05:06:45+08:00

    怎么样:

    my $size1 = "123B";
    given $size1 {
          say "OK" if .Str && $_.ends-with("B") && $_.chop >= 0;
    };
    

    $_是 Raku(以及 Perl)中的“主题变量”。您可以缩写为$_.ends-with(),或将代码进一步缩短为.ends-with(),如下所示。同样$_.chop可以进一步缩短为.chop,如下所示。


    或者使用[&&]归约元运算符:

    my $size2 = "123B";
    given $size2 {
          say "OK" if  [&&] .Str, .ends-with("B"), .chop >= 0;
    };
    

    或者使用all()连接点:

    my $size3 = "123B";
    given $size3 {
          say "OK" if  $_ ~~ all(.Str, .ends-with("B"), .chop >= 0);
    }
    

    或者given完全消除该块:

    my $size4 = "123B";
    say "OK" if  $size4 ~~ all(.Str, .ends-with("B"), .chop >= 0);
    

    https://course.raku.org/essentials/loops/topic/

    • 5
  2. librasteve
    2023-08-28T02:37:24+08:002023-08-28T02:37:24+08:00

    { when /B$/ { say 'OK' } } given my Str $size = '123B'

    我的回答有点厚脸皮,因为你知道 $size 是一个 Str 如果它与正则表达式匹配并且你知道它是否有一个 B 作为最后一个字符,那么 .chop >= 0

    my $size = '123B';
    { when (Str && /B$/ && .chop >= 0) { say 'OK' } } given $size
    

    这种概括可能更符合您所问的精神

    • 2

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve