[转帖]Scala 数据类型学习_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3346 | 回复: 0   主题: [转帖]Scala 数据类型学习        下一篇 
刘伟
注册用户
等级:少校
经验:938
发帖:82
精华:0
注册:2013-6-24
状态:离线
发送短消息息给刘伟 加好友    发送短消息息给刘伟 发消息
发表于: IP:您无权察看 2013-6-27 10:36:14 | [全部帖] [楼主帖] 楼主

在Scala中,一切都是对象,即使是一个整数也是对象:

  1. scala> 1 
  2. res0: Int = 1 scala> "Hello" res1: java.lang.String = Hello


复制代码

Int实际上是scala包(package)中的类别,Scala会自动import该包下的类别,Byte、Short、Int、Long、Char、Float、Double、Boolean等都位于scala包中,在JVM上运行时,它们对应于Java中的byte、short、int、long、char、float、double、boolean等基本型态(Primitivetype),有着与Java中基本资料型态相同的范围。Scala也重用一些Java中的类别,例如字串,在上面的示范中可以看到,Scala直接重用了java.lang.String类别(Scala也会自动import包java.lang)。

如果你在程式中直接写一个整数,则默认的是十进位的Int整数,你可以用0开头表示这是个八进位整数,用0x开头表示这是个十六进位整数,以L或l结尾时,表示这会是个Long整数:

  1. scala> 010 
  2. res2: Int = 8


复制代码

如果你直接撰写一个浮点数,则默认会是个Double,加上F或f可以指定其为Float,你也可以使用特学记号来表示浮点数:

  1. scala> 3.14 
  2. res5: Double = 3.14 
  3. scala> 3.14F


复制代码

字符是以单引号包裹住,也可以指定Unicode编码:

  1. scala> 'A' 
  2. res9: Char = A 
  3. scala> '\u0041'


复制代码
以\作开头为转义字符,如以上指定Unicode编码是其中一例,你还可以有以下的字符来转义:

\\

反斜线

\'

单引号  '

\"

双引号"

\uxxxx

以16  进位数指定Unicode字元输出

\b

倒退一个字元

\f

换页

\n

换行

\r

光标移至行首

\t

跳格(一个Tab键)



在Scala中,若要取得整数、浮点数等的数值范围,则可以使用scala.Math(这是一个object定义)中所定义的值(在Java中则是定义在各自的包裹对象上,如Integer、Double等),例如:

  1. println("Int: " + Math.MIN_INT + " ~ " + Math.MAX_INT) 
  2. println("Long: " + Math.MIN_LONG + " ~ " + Math.MAX_LONG) 
  3. println("Float: " + Math.MIN_FLOAT + " ~ " + Math.MAX_FLOAT) 
  4. println("Double: " + Math.MIN_DOUBLE + " ~ " + Math.MAX_DOUBLE)


复制代码
这个程式会显示以下结果:

  1. Int: -2147483648 ~ 2147483647 
  2. Long: -9223372036854775808 ~ 9223372036854775807 
  3. Float: -3.4028235E38 ~ 3.4028235E38 
  4. Double: -1.7976931348623157E308 ~ 1.7976931348623157E308


复制代码
在Scala中,如整数、浮点数等基本类型,可以直接作一些操作,例如:

  1. scala> -13 abs 
  2. res5: Int = 13 
  3. scala> 1 max 2 
  4. res6: Int = 2 
  5. scala> 3.14 round 
  6. res7: Long = 3 
  7. scala>


复制代码

事实上,abs、max、round等都是对象上的方法(在Scala中,方法如果不带参数或只带一个参数,则括号可以省略),但并非Int、Double上的方法,在Scala中,如果发现某个方法不属于某对象,则会尝试看看是否有定义的隐式转换(Implicitconversion),在这边的例子中,由于Scala为这些基本数据类型定义了一些富包裹器(RichWrapper),当必要时,会尝试将数值以富包裹器包裹,看看是否可以执行所指定的方法,例如abs、max其实是scala.runtime.RichInt上的方法,round其实是scala.runtime.RichDouble上的方法。下表列出了基本型态与富包裹器的对应:


scala.Byte

scala.runtime.RichByte

scala.Char

scala.runtime.RichChar

scala.Int

scala.runtime.RichInt

scala.Long

scala.runtime.RichLong

scala.Float

scala.runtime.RichFloat

scala.Double

scala.runtime.RichDouble

scala.Boolean

scala.runtime.RichBoolean

java.lang.String

scala.runtime.RichString




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论