perl6中函数参数(2)

 1 use v6;
 2 #如果参数是可选的, 可以在后面加个?后定义
 3 sub Choo($x, $y?){
 4   say $x+$y;
 5 }
 6 Choo(1);
 7 Choo(1,2);
 8 #具名参数, 也就是字典形式的调用
 9 sub Dit(:name($n), :age($a)){
10   say $n,‘ is ‘, $a;
11 }
12 Dit(name => ‘root‘, age => ‘360‘);
13 Dit(age=>‘php‘, name=>‘localhost‘);
14 Dit(:name(‘li‘), :age(20));
15 #具名参数, 在定义时, 可可以这样
16 sub Dit2(:$name, :$age){
17   say $name,‘|‘, $age;
18 }
19 #还可以这样调用, 当没带值时, 只加:时, 默认为Treu, 加:!时, 默认为False
20 Dit2(:name, :!age);
21
22 #如果不知道有多少个参数, 要收集所有参数, 可以用一个*放在变量前收集
23 #这个*表示收集, 后面的@all还是表示一个数组(注意)
24 sub All($user, *@all){
25   say $user;
26   say @all;
27 }
28 All(1,2,3,4,5);
29 #还可以这样收集
30 sub All2($user, *%all){
31   say $user;
32   say %all.kv;
33 }
34 All2(1,a=>1,b=>2);
35 All2(1,:a(2), :b, :!c);
36
37
38
39 sub Arr($a, @a, %a){
40   say $a;
41   say @a;
42   say %a.kv;
43 }
44 my $a=1;
45 my @a=1;
46 my %a=(:a);
47 Arr($a, @a, %a);
时间: 2024-11-08 21:57:24

perl6中函数参数(2)的相关文章

perl6中函数参数(1)

sub F($number is copy){ $number++; say $number; } F(5); #下面是错误的 sub F($number){ $number++; say $number; } F(5) 默认情况下, 参数不可更改,如果要更改, 可以加 is copy 或 is rw 又或者, 你用原来的参数名字, 像下面这样: sub F($number){ my $swap = $number; $swap++; say $number; say $swap; } F(5)

python中函数参数的引用方式

值传递和引用传递时C++中的概念,在python中函数参数的传递是变量指向的对象的物理内存地址!!! python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过"传引用"来传递对象.如果函数收到的是一个不可变对象(比如数字.字符或者元组)的引用,就不能直接修改原始对象--相当于通过"传值

C语言中函数参数为什么是由右往左入栈的?

先通过一个小程序来看一看: #include void foo(int x, int y, int z) { printf("x = %d at [%X]n", x, &x); printf("y = %d at [%X]n", y, &y); printf("z = %d at [%X]n", z, &z); } int main(int argc, char *argv[]) { foo(100, 200, 300);

JavaScript中函数参数的按值传递与按引用传递(即按地址传递)

首先声明一句:JavaScript中所有函数的参数都是按值传递的!不存在按引用传递! 在讲传递参数之前我们先来讲一下指针. 学过C指针的应该都知道,指针变量中保存的是一个地址,程序可以根据所保存的地址访问内存中对应的值并进行操作,如下图: 其中地址为0x00000016保存的是一个地址,指向地址0x00000036,即0x00000016被开辟为一个指针变量,可以引用0x00000036地址的值,这是按引用方式访问变量:另外一种访问变量的方式是按值访问,即图中0x00000008地址. 在Jav

C语言中函数参数入栈的顺序 - Fangzhen - 博客园

.wiz-todo, .wiz-todo-img {width: 16px; height: 16px; cursor: default; padding: 0 10px 0 2px; vertical-align: -10%;-webkit-user-select: none;} .wiz-todo-label { display: inline-block; padding-top: 7px; padding-bottom: 6px; line-height: 1.5;} .wiz-todo

JavaScript中函数参数的值传递和引用传递

结论:对于数字.字符串等是将它们的值传递给了函数参数,函数参数的改变不会影响函数外部的变量. 对于数组和对象等是将对象(数组)的变量的值传递给了函数参数,这个变量保存的指向对象(数组)的地址.当函数改变这个地址指向的对象(数组)的内容时,同时也改变了函数外部变量指向的对象(数组)的内容:当函数改变的是变量的地址时,实际就与函数外部的变量失去了联系,变成了完全不同的对象了,不会对函数外部对象造成改变. 很多人认为 JS 中参数有两种传递方式:数字.字符串等按值传递:数组.对象等按地址(引用)传递.

Delphi 中 函数参数中的 const 修饰符的本质以及注意事项

来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------------------------------------------ 很多书籍中说函数参数如果是String类型的,如果在函数内部不改变参数的值,使用 const 修饰符会加快程序的执行速度,至于如何加快的?有的人说是因为 const 函数保证了参数字符串不会被复制.以前也没有对这个问题深入研究

php与js中函数参数的默认值设置

php函数参数默认值设置: <?phpfunction test($val=3){   echo $val."<br/>";}test(11);test();?> javascript函数参数默认值设置function test(){alert("test函数");} function test2(val,func){ val=val||"";//利用js中的或操作,第一个参数值为false(为空)时返回第二个参数的值.第

c++中函数参数的求值顺序

c++中如果函数的参数列表包含多个实参,那么对参数的求值顺序是不确定的. 在谭浩强的<C++程序设计>(第二版)P94中提到,GCC对参数求值是按从右到左的顺序求值的. 但我实测并非如此. #include <iostream> #include <iomanip> using namespace std; void test(int x, int y) { cout << 'x' << x << " y" <