zoukankan      html  css  js  c++  java
  • 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 啦
    
    
    天和地是灰色的,砖和瓦也是灰色的。临街的墙几经风化,几经修补,刷过黑灰、白灰,涂过红漆,书写过不同内容的标语,又终于被覆盖;风雨再把覆盖层胡乱地揭下来,形成一片斑驳的杂色,融汇于灰色的笼罩之中。路旁的树木苍黑,瓦楞中芳草青青。 远处,炊烟缭绕。迷蒙的曙色中,矗立着...
  • 相关阅读:
    hive中map与reduce的个数问题
    count(*) 与 count(1)的区别?
    星型模型与雪花模型有什么优缺点
    如何估计数据需要存储空间
    element-ui的table控件得到所有的表头label值
    vue-image-crop-upload通过params带参的时候key总是img
    vue通过window.addEventListener('scroll', XXXX)无法监听屏幕滚动事件
    在vue里面无法通过document.getElementById来修改ElementUI自带的标签
    Vue-Router升级导致的Uncaught (in promise)问题【转载别人的】
    node安装依赖以及使用api
  • 原文地址:https://www.cnblogs.com/raybiolee/p/flow-control-in-perl6_a-new-language.html
Copyright © 2011-2022 走看看