
220
|
第
11
章
11.3
子例程存储在库中
先从一个简单的子例程开始,要选择两个整数之间(包括端点)的一个随机整数。
可以使用
.rand
,并用
.Int
强制转换结果,然后把结果转移到正确的范围:
sub random-between ( $i, $j ) {
( $j - $i ).rand.Int + $i;
}
say random-between( -10, -3 );
你可能相信这是正确的。你的程序能完成工作,所以你不再考虑它。然后你写了另
一个程序,要做类似的工作,你想再使用之前的那个子例程。你的做法很简单粗暴(尽
管很多人不想承认):通过剪切粘贴把那个子例程放在另一个不同程序中。同样的,
它应该也能工作。不过,真的能正确工作吗?
你真的可以得到
$i
和
$j
之间的一个数吗(包括
$i
和
$j
)?
练习
11.3
对于任意的
$i
和
$j
,
random-between
生成的最大数是什么?编写一个程序,
反复运行
random-between
查看实际结果范围来确定这个最大数。
一旦完成这个练习,你会知道
random-between
从来不会选择第二个端点作为一个生
成的随机值。如果把它复制到其他程序中,很多情况下都可能有错误。对此有一个
解决办法。
如果要在多个程序中使用相同的子例程,可以在一个库(
library
)中将这个子例程定
义一次。库是一个单独的文件,可以导入到你的程序中。
把
random-between
移至一个扩展名为
.pm
或
.pm6
的新文件:
# MyRandLibrary.pm6
sub random-between ...