本帖最后由 rongchaogao 于 2014-05-13 09:50 编辑
11: Built-in types,operators and methods github地址所有后续更新都在github上进行,其他地方不做同步。 发现任何错误,或者不当的地方,请先到github查看是否改正。 如果没有请留言。或者邮件交流:rongchaogao@gmail.com 引入很多操作符都需要一种特定类型的数据。 如果操作对象和要操作对象的类型不统一, Perl会复制一份操作对象,然后将它转换成需要的类型。 比如:$a+$b 将把$a和$b的副本转换成数字(如果它们 已经都是数字了除外)。这种隐式的转换被称为强制转换(coercion)。 除了操作符,其他一些语法也会强制转换,if 和 while 会把数据转换成 真假(布尔值),for会把数据转换成列表,等等。 数字有些时候强制转换都是透明的。Perl 6 中有许多数字类型,他们都可以混合使用。 比如:用一个整数减去一个浮点数,123-12.1e1。 这里面最重要的类型是: Int对象存储的是任意大小的整数。如果你如果你写的文字只包含数字,比如12,那么 他就是 Int。 Num是浮点型数据。它存储着符号,小数部分和指数,每一个都有固定的长度。 用科学记数法表示的数字比如 6.022e23 就是Num类型的数字。 Rat是有理数的缩写,存储小数的时候不会损失精度。这是通过跟踪作为整数的 分子和分母来实现的。所以当数学运算在遇到很大的组成部分(large components) 的有理数的时候,运算速度会非常的慢。因为这个原因,当有理数有一个大分母的时候 会自动讲解为Num类型。 所以写一个以小数点为分隔符的分数值,比如3.14,就是一个Rat 类型的数。 复数有两个部分,实部和虚部,如果其中任何一部分为 NaN,然后整个数字也许就是 NaN。 复数是这种形式 a + bi , bi 是虚部。 下面所有的操作符都可以操作上面的数字类型。: 大部分数学函数都既可以写成方法调用也可以写成函数的形式,所以你既可以这样写, (-5).abs 也可以这样写 abs(-5)。 三角函数 sin, cos, tan, asin, acos, atan, sec, cosec, cotan, asec, acosec, acotan, sinh, cosh, tanh, asinh, acosh, atanh, sech, cosech, cotanh, asech, acosech 和 acotanh 默认用弧度来计算。当然你可以自己指定一个 参数来使用 Degrees , Gradians , Circles 来进行三角函数的计算。 比如:180.sin(Degrees) 近似等于0。 双目操作符单目运算符数学函数或方法调用abs | 绝对值 | sqrt | 平方根 | log | 自然对数 | log10 | 以10为底的自然对数 | ceil | 不小于当前数的整数 | floor | 不大于当前数的整数 | round | 四舍五入 | sign | 正负号,-1是负数,0是0,1是正数 | 字符串字符串存储类型为 Str ,存储的内容是一串字符,独立于字符编码之外(?)。 Buf 类型的字符串存储的是二进制数据。调用 encode 方法可以把 Str 类型转换成 Buf 类型。 decode 把 Buf 类型转换为 Str 。 下面是对字符串的操作符: 字符串双目操作符~ | 连接操作符:’a’~’b’ 变成 ‘ab’ | x | 重复操作符号:’a’ x 2 变成 ‘aa’ | 字符串单目操作符字符串函数,调用方法.chomp | 去掉字符串末尾的换行符 | .substr($start,$length) | 截取一段字符,$length 默认是剩下的字符的长度 | .chars | 字符串中字符的数目 | .uc | 转换为大写 | .lc | 转换为小写 | .ucfirst | 把第一个字符转换为大写字符 | .lcfirst | 把第一个字符转换成小写 | .capitalize | 把单词的第一个字符转换为大写,其他字符转换为小写 | 布尔值一个布尔值要么是 True 要么是 False 。 任何值在布尔上下文中都可以转换为布尔值。 决定一个值是真还是假的规则因值的类型不同而不同: - 字符串,空字符串和’0’被认为是 False。其他类型转换为 True 。
- 数值,0为假,其他都为真
- 列表和哈希,类型的集合比如,列表,和哈希,如果是空的,那么认为是False,反之认为是True。
if 等控制结构可以自动在布尔上下中,根据条件,计算真假。 你可以通过在表达式前添加?,来强制转换为布尔上下文。 前置的!可以用来取反,若它后面的操作数为真,就返回假。
- my $num=5;
- # 隐式的布尔环境
- if $num { say "True" }
- # 明确的布尔环境
- my $bool=?$num;
- say $bool;
- # 取反
- my $not_num=!$num;
- say $not_num;
- C:\Windows\system32\cmd.exe /c perl6 a.pl
- True
- True
- False
- Hit any key to close this window...
复制代码
|