Backup: Flow Control in Perl6
Control Flow
注意空格,注意空格,注意空格
和 Perl5不同的是,这些结构都可以返回值,而且即使倒置结构也可以用 block 了
block 可以有逗号
with without orwith
{...}; #后面可以加; 这样就成了statement,会被立即执行;默认是不会立即执行的
do {...}; #do可以让block立即执行,并和sub/method一样返回最后执行的语句
#do的block也只有需要返回值的时候才被执行
#do也可以在没有{}的情况用,只有是一个 expression 最后的部分
quietly {};
#warnings 不会烦人地显示的
once {};
#只运行一次,即使在 loop 中也一样一次
#------------
#循环
#------------
for @LIST -> $item {...}
# -> $item 可以省略,默认是用$_,而且同样可以省略
for @LIST.kv -> $idx, $val {...}
for %HASH.kv -> $key, $val {...}
for @LIST <-> $_ {...}
#这样$_就可读可写了,默认是只可读
#同样可以把 for loop 用()括起来得到返回值
my @a = (for 1,2,3 { $_ * 2 });
my @a = do for 1,2,3 { $_ * 2 };
#有爱的一点就是把 C 语言格式的 for loop 换成了
loop (my $i = 0; $i < 10; $i++) {...}
#同样可以把 loop loop 用()括起来得到返回值
while True/False {...}
until True/False {...}
{...} while True/False
{...} until True/False
#同样可以把 while/until loop 用()括起来得到返回值
# do {...} while True/False;不能用
#可以用
repeat {...} while True/False;
repeat {...} until True/False;
#和 Perl5 一样也有 next/last/redo
#------------
#条件
#------------
if True/False {...} #condition 部分也不必要()了
{...} if True/False # statement modifier form。Perl5中不能用 block
(if True/False {...})
({...} if True/False)
#要么返回 last evaluated,要么空 list
if True/False {...} else {...}
if True/False {...} elsif {...} else {...}
#else 任何时候都是可以没有的
#不能像 Python 中那样 {...} if True/False else {...}
#多可以用()括起来得到返回值
#有一点不可思议的是,
#else 可以获取上一个执行的 if/elsif 的值,格式是
if {} else -> $a {...}
#$a就是上次执行的 if block 的结果
unless True.False {...}
#不能有 else/elsif,可以用
{} unless True/False
given EXPR {
when EXPR { ... }
when EXPR { ... }
default { ... }
}
given EXPR {...}
{...}(EXPR)
#和 for 一样也是使用$_,同样可以没有when/default
#注意 when 的顺序
#用proceed 表示立即退出当前 when/default,继续后续的 when/default,但不会退出 given
#用succeed 表示立即退出 given 块
#同样可以把 given block 用()括起来得到返回值
#此外还有一些
with expression {...}
orwith expression {...}
without expression {...}
#和 if 一样,但会检查 expression 是否定义
#上面的分别和 if elsif unless 对应
gather { take ...; ...}
#有点多选项的意思,只要满足条件就返回,对返回个数没有限制
# generate values lazily
# scoped dynamically
#上面的这两个点 so lazy
#------------
#LABEL
#------------
#while/until/for loop 可以有 LABEL,可以和 redo/next/last 一起使用
#当然也可以 goto 啦
Backup: Flow Control in Perl6的更多相关文章
- Node.js学习笔记 02 Implementing flow control
What is flow control? 和其它语言一样,Node.js 在代码编写时,如何组织代码,如何写出clean code都是不可避免的难点. 同时,由于Node.js的天然特性(异步,事件 ...
- RocketMq发送消息出现com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2 DESC: [TIMEOUT_CLEAN_QUEUE]broker busy, start flow control for a while, period in queue: 201ms, size of queue: 1
最近对系统进行压测,发现发送消息到消息队列的时候出现如下错误: com.alibaba.rocketmq.client.exception.MQBrokerException: CODE: 2 DE ...
- Go Flow Control
[Go Flow Control] 1.for没有(),必须有{}. 2.for的前后表达式可以为空. 3.没有while,for即是while. 4.无穷循环. 5.if没有(),必须有{}. 6. ...
- Producer Flow Control 和 vmQueueCursor
ActiveMQ可以开启或关闭生产者流量控制Producer Flow Control ,基本原理是producer 发送一条消息会收到broker返回的ack响应,当磁盘或内存快满的时候broker ...
- Educational Codeforces Round 45 (Rated for Div. 2) F - Flow Control
F - Flow Control 给你一个有向图,要求你给每条边设置流量,使得所有点的流量符合题目给出的要求. 思路:只有在所有点的流量和为0时有解,因为增加一条边的值不会改变所有点的总流量和, 所以 ...
- TCP Flow Control and Data Transfer
TCP Flow Control TCP Data Transfer Selective Repeat ARQ with Positive ACK Window slides a byte basis ...
- 第三章: Expressions and Flow Control
第三章: Expressions and Flow Control一:局部变量和实例变量定义变量是指设定变量的数据类型和变量的名字,Java语言要求变量遵循先定义,再初始化,然后使用的规则.作用域:指 ...
- RabbitMQ学习之Flow Control
当RabbitMQ发布消息速度快于消费速度或者系统资源不足时,RabbitMQ将降低或阻断发布消息速度,以免服务器资源饱满而宕机,可以通过rabbitmqctl和web管理页面查看连接的状态为flow ...
- SecureCRT VBscript关闭Flow Control CTS
crt.Session.Connect "/Serial COM2 /BAUD 38400 /NOCTS" 更多命令行参数可查看SecureCRT-Help-Help Topics ...
随机推荐
- iOS:详细的正则表达式
1.简介: 在项目中,正则的使用是很普遍的,例如登录账号和密码(手机号.邮箱等).用到的方法就是谓词对象过滤:NSPredicate. 2.什么是正则表达式: 正则表达式,又称正规表示法,是对字符串操 ...
- 如何解决SQLServer占CPU100%
文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 有哪些SQL语句会导致CPU过高? 查看SQL的查询计划 ...
- 第五篇 Integration Services:增量加载-Deleting Rows
本篇文章是Integration Services系列的第五篇,详细内容请参考原文. 在上一篇你学习了如何将更新从源传送到目标.你同样学习了使用基于集合的更新优化这项功能.回顾增量加载记住,在SSIS ...
- nssstring 转换大小写
//7.将字符串中的字母转换成大写 NSString * str10 = @"china"; NSString * tmpStr1 = [str10 uppercaseString ...
- Java基础之写文件——缓冲区中的多条记录(PrimesToFile3)
控制台程序,上一条博文(PrimesToFile2)每次将一个素数写入到文件中,所以效率不是很高.最好是使用更大的缓冲区并加载多个素数. 本例重复使用三个不同的视图缓冲区加载字节缓冲区并尽可能加入更多 ...
- c++l类
c++类和C#中定义类的方法异同之处: 1. 相同处: 1.1.都需要使用 class标识: 1.2.都包含有成员:函数,属性: 1.3.都有private public protect 标识的成员 ...
- Redis认识
摘要:认识Redis 1.安装Redis npm install redis 2.Redis使用 var redis = require("redis"), client = re ...
- MVC1
- java io读书笔记(5) Writing Bytes to Output Streams
outputstream类是所有的字符输出类的父类,他是一个抽象类. 对于OutputStream类来说,其最基础的方法就是:write(). public abstract void write(i ...
- Swift游戏实战-跑酷熊猫 00 游戏预览
这个系列我们将要一起来做一个这样的游戏