is Code
Block 是一个用于小规模代码重用的代码对象。块在语法上由用大括号括起来的一系列语句创建。创建空块的字面量是 {;}。
如果没有显式签名或占位符参数,块将 $_ 作为位置参数,默认值为外部范围的 $_。因此,如果有的话,它将继承 主题。
my = ;say .^name; # OUTPUT: «Block»say ('hello'); # OUTPUT: «HELLO»say .signature; # OUTPUT: «(;; $_? is raw = OUTER::<$_>)»
块可以在 -> 或 <-> 和块之间具有 Signature
my = -> , = 2 ;say (40); # OUTPUT: «42»
如果签名是用 <-> 引入的,则参数默认情况下被标记为 rw:
my = <-> , ;my (, ) = (2, 4);(, );say ; # OUTPUT: «4»
不是 Routine 类型(它是 Block 的子类)的块对 return 是透明的。
sub f()
最后一个语句是块的隐式返回值。
say .(); # OUTPUT: «1»
裸块会按照它们出现的顺序自动执行。
say 1; # OUTPUT: «1»say 3; # OUTPUT: «3»
类型图§
Block 的类型关系