首页 > 其他分享 >Raku教程值运算符详解

Raku教程值运算符详解

时间:2024-03-22 12:02:35浏览次数:20  
标签:运算 示例 数值 运算符 详解 Raku True

文章目录

简介

raku中提供了非常多的运算符操作,除了常见的数值和逻辑上的计算之外,对于类型转换、数据生成等常用操作,也提供了相应的运算符。

此外,运算符作用在变量或字面量的不同位置,可能会产生不同的结果,据此可将运算符分成以下类别

类型解释示例
前缀用在项前++1
中缀用在项与项之间1+2
后缀用在项后1++
环缀包围项(1)
后环缀在一个项之后, 包围另一个项Array[1]

数值和字符串运算

运算符这个概念最初肯定是用在数值计算的,比如最经典的加减乘除,后来随着运算符可以被重载,也运用在字符串上,使之可以拼接、重复。这些运算在许多编程语言中均有提供,理解起来也比较方便,下面举出

类型运算符
加减乘除+, -, *, /
数值运算指数【**】;整除【div】;取模【%】;整除判断【%%】
数论运算最大公约数【gcd】;最小公倍数【lcm】
字符串运算拼接【~】;重复【x】

示例如下,注释后是运算结果

3 div 2     # 1
(-3) div 2  # -2
6 gcd 9     # 3
9 ~ 7       # 97
13 x 3      # 131313
"Hi " x 2   # Hi Hi

raku中还提供了自增和自减运算符,并分别提供了前缀和后缀的模式,其增减逻辑与C语言相通,当作为前缀使用时,先计算,后返回;当作为后缀时,先返回,后计算。

my $a=2;
my $b=2;
++$a;       # 返回 3
$b++;       # 返回2

比较

在编程中常见的比较操作,其比较对象往往要有相同的数据类型,比较结果一般是True或False,Raku针对这种比较方法,提供了数值和字符串两类中缀运算符,如下表所示。

功能数值运算符字符串运算符
相等==eq
不等!=ne
小于<lt
大于>gt
小于等于<=le
大于等于>=ge

此外,raku还提供了返回类型是Same, Less或者More的比较运算符,其中<=>用于数值比较;leg用于字符串比较;cmp则不限数据类型比较,示例如下

1 <=> 1.0   # Same
"a" leg "b" # Less
'a' cmp 2   # More

最后,Raku还提供了功能更加强大的智能匹配运算符【~~】,其效果如下

2 ~~ 2              # True
"Raku" ~~ "Raku"    # True
"Raku" ~~ Str       # True

类型转换

raku中,将类型转换操作也运算符化了,即下面四个前缀运算符

  • + 强制转变为数值
  • - 强制转换为数值并返回相反数
  • ? 强制转换为布尔值
  • ! 强制转换为布尔值并取反

非布尔类型,只有空字符串、未分配的变量以及数值0才会被强转为False,否则转换结果均为True,示例如下

+ "3"       # 3
- "5"       # -5
?"Hello"    # True
my $valid;
?$valid     # False
!2          # False

构造数据

Raku中提供了区间这种数据类型,可用于表示连续的数列,并配套了一些中缀操作符,用于构造不同类型的区间。根据区间左右的开闭情况,可分为如下四类,规律是,有尖号即为开区间,否则为闭区间。

运算符示例结果运算符示例结果
0…5 [ 0 , 5 ] [0,5] [0,5]05 ( 0 , 5 ) (0,5) (0,5)
…^0…^5 [ 0 , 5 ) [0,5) [0,5)^…0^…5 ( 0 , 5 ] (0,5] (0,5]

其中,从0开始的左闭右开区间,有一个更加方便的前缀运算符,例如5就等价于0…^5。

此外,Raku中还提供了惰性列表构造运算符…,可生成惰性列表,即只有接到请求时才返回元素。

最后,通过竖线|,可将区间展开成列表,示例如下

my $r = 0..5;   # 0..5
|$r             # (0 1 2 3 4 5)

高级运算符

此所谓高级,指的是作用在运算符上的运算符。Raku提供了两类运算符操作,一类是针对中缀运算符,只需在运算符前面加个R,就能得到调换运算符两边的参数后运算的结果。另一类则提供了相同运算符的归约运算,可以大大节省代码。二者示例如下。

2 / 3       # 0.666667
2 R/ 3      # 1.5
[+] 1,2,3,4,5   # 等价于    1 + 2 + 3 + 4 + 5

标签:运算,示例,数值,运算符,详解,Raku,True
From: https://blog.csdn.net/m0_37816922/article/details/136725900

相关文章

  • Linux mke2fs命令教程:创建和管理你的ext2/ext3/ext4文件系统(附案例详解和注意事项)
    Linuxmke2fs命令介绍mke2fs(makeext2filesystem)命令是用来创建ext2/ext3/ext4文件系统的。它通常在磁盘分区上创建文件系统,设备是对应设备的特殊文件(例如/dev/hdXX)。如果省略了块数,mke2fs会自动计算文件系统的大小。Linuxmke2fs命令适用的Linux版本mke2fs命令在所有......
  • Linux hdparm命令教程:优化硬盘性能和读写速度(附实例详解和注意事项)
    Linuxhdparm命令介绍hdparm是一个用于控制和配置硬盘驱动器的命令行工具。它允许您查看和修改硬盘的参数,包括缓存设置、高级电源管理、硬盘性能等。通过hdparm,您可以优化硬盘的读写速度和性能。Linuxhdparm命令适用的Linux版本hdparm在大多数Linux发行版中都可用,......
  • 结构体&&联合&&枚举(详解版)
    1.结构体    1.结构体的声明structtag{member-list;}variable-list;    2.结构体的特殊声明struct{inta;charb;floatc;}x;struct{inta;charb;floatc;}a[20],*p;                 上述代码属于匿名结构体类型......
  • 邻接矩阵详解
    邻接矩阵是图论中用于表示图(Graph)结构的一种重要数据结构,特别适用于表示顶点之间连接关系的图形。在计算机科学和数学领域,它被广泛应用来编码无向图和有向图的信息。对于一个具有n个顶点的图G=(V,E),邻接矩阵是一个n×n的矩阵A,其中的行和列分别对应着图中的每个顶点。矩......
  • burpsuit插件Turbo Intruder:突破速率限制详解
    一、插件介绍Turbo Intruder是一个BurpSuite扩展插件,用于发送大量HTTP请求并分析结果,可拥抱十亿请求攻击。它旨在处理那些需要异常速度、持续时间或复杂性的攻击来补充Burp Intruder。二、插件原理使用第一次请求的时候就建立好连接,后续获取资源都是通过这条连接来获取资......
  • 对象Constructor构造函数解析详解
    构造函数解析构造函数解析示例,code如下。定义实体类:packagecom.gientech.constructor;publicclassPerson{privateStringname;privateintid;privateintage;privateStringsex;publicPerson(){}publicPerson(String......
  • 二叉树详解
    二叉树详解一:什么是树1:概念2:树的特点##3:树的一些重要概念二:二叉树1:二叉树的概念2:二叉树的特点3:特殊的二叉树:三:二叉树的性质四:二叉树的存储一:什么是树1:概念树是一种非线性的数据结构,它是由n个节点组成的一个具有层次关系的集合,把它叫做树的原因是因......
  • ConcurrentHashMap底层详解
    ConcurrentHashMap是线程安全且高效的HashMap。一、使用原因在并发编程中使用HashMap可能导致程序死循环。而使用线程安全的HashTable效率又非常低下,基于此产生了ConcurrentHashMap。1.线程不安全的HashMap在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率......
  • nmon监控工具使用方法详解
    在信息化时代,系统监控对于确保服务器和应用的稳定运行至关重要。nmon(Nigel’sMonitor)作为一款强大的性能监控工具,以其直观、全面的监控能力,赢得了众多系统管理员的青睐。本文将详细介绍nmon监控工具的使用方法,帮助读者更好地利用这一工具,提升系统监控效率。一、nmon监控工......
  • JavaScript初识及基本语法详解
    JavaScript是一种轻量级的解释型或即时编译型的编程语言。它最初被设计为在浏览器中用于与网页进行交互,但随着时间的推移,它已经成为了后端开发、游戏开发、桌面应用开发等多个领域的重要工具。1.JavaScript初识1.1历史与用途历史:由BrendanEich在1995年开发,最初......