免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: rongchaogao
打印 上一主题 下一主题

Using Perl6 第一二十章(更新第十章内置操作符,类型) [复制链接]

论坛徽章:
1
处女座
日期:2014-03-28 10:11:00
11 [报告]
发表于 2014-05-12 18:48 |只看该作者
本帖最后由 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
Int对象存储的是任意大小的整数。如果你如果你写的文字只包含数字,比如12,那么 他就是 Int。
  • Num
Num是浮点型数据。它存储着符号,小数部分和指数,每一个都有固定的长度。
用科学记数法表示的数字比如 6.022e23 就是Num类型的数字。
  • Rat
Rat是有理数的缩写,存储小数的时候不会损失精度。这是通过跟踪作为整数的 分子和分母来实现的。所以当数学运算在遇到很大的组成部分(large components) 的有理数的时候,运算速度会非常的慢。因为这个原因,当有理数有一个大分母的时候 会自动讲解为Num类型。
所以写一个以小数点为分隔符的分数值,比如3.14,就是一个Rat 类型的数。
  • Complex 复数
复数有两个部分,实部和虚部,如果其中任何一部分为 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。
双目操作符
**乘方
*乘法
/除法
div整除
%取余
+
-
单目运算符
+转换为数值
-非 取反
数学函数或方法调用
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’
字符串单目操作符
~转换成字符串:~1 变成 ‘1’
字符串函数,调用方法
.chomp去掉字符串末尾的换行符
.substr($start,$length)截取一段字符,$length 默认是剩下的字符的长度
.chars字符串中字符的数目
.uc转换为大写
.lc转换为小写
.ucfirst把第一个字符转换为大写字符
.lcfirst把第一个字符转换成小写
.capitalize把单词的第一个字符转换为大写,其他字符转换为小写
布尔值
一个布尔值要么是 True 要么是 False 。 任何值在布尔上下文中都可以转换为布尔值。 决定一个值是真还是假的规则因值的类型不同而不同:
  • 字符串,空字符串和’0’被认为是 False。其他类型转换为 True 。
  • 数值,0为假,其他都为真
  • 列表和哈希,类型的集合比如,列表,和哈希,如果是空的,那么认为是False,反之认为是True。
if 等控制结构可以自动在布尔上下中,根据条件,计算真假。 你可以通过在表达式前添加?,来强制转换为布尔上下文。
前置的!可以用来取反,若它后面的操作数为真,就返回假。

  1. my $num=5;

  2. # 隐式的布尔环境
  3. if $num { say "True" }

  4. # 明确的布尔环境
  5. my $bool=?$num;
  6. say $bool;

  7. # 取反
  8. my $not_num=!$num;
  9. say $not_num;

  10. C:\Windows\system32\cmd.exe /c perl6 a.pl
  11. True
  12. True
  13. False
  14. Hit any key to close this window...
复制代码

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP