Scala学习笔记--视图界定

本文介绍了Scala中的泛型类和函数,包括类型参数的推断和指定。重点讲解了类型变量的界定,如等界、上界和视图界定,并通过示例说明如何使用视图界定进行类型转换,以便调用Comparable接口的方法。同时,讨论了Ordered特质在比较操作中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1> 泛型类
1. 定义形式
class Pair[T,S](val first : T, val second : S)
T,S是类型的参数
2. Scala会从构造参数推断出实际类型
Val p = new Pair(42,”String”) //Pair[Int,String]
你也可以自己指定类型
Val p2 = new PairAny,Any
2> 泛型函数
1. 在函数名的后面需要把类型的参数加上
def getMiddle[T](a : Array[T]) = a(a.length / 2)
例如:
getMiddle(Array(“Mary”,”had”,”a”,”little”,”lamb”)) //将会调用getMiddle[String]
3>类型变量界定
1.如下代码就可以将声明两个组件类型相同
Class Pair[T](val first : T, val second : T)
2. 这是一个比较大小的代码
<: 设置了上界的类型,表面T必然是Comparable的子类,而要比较不同T类型的值的大小,就需要调用Comparable下面的 compareTo()方法,最后打印的结果是:Spark,因为是根据字典的排序顺序的。
这里写图片描述
这里写图片描述

  1. 如果我们想比较数字的话,就不可以用上面的方法了,因为类型不匹 配。
    <% 可以将T 隐身转换车成Comparable[T]
    <% 叫 视图界定 把T类型的实例转换成Comparable[T]类型,如果T类型的实例不是Comparable[T]的子类,利用视图界定的形式就可以把T类型,隐式转换
    例如: 视图界定 把 Int 转换成 RichInt 而RichInt 是Comparatable[T]的子类,
    所以就可以调用compareTo()
    这里写图片描述
    这里写图片描述
    4.Ordered
    如果想用 > ,<, == 来比较大小的话,可以用如下代码
    但是对于String类型来说,需要通过视图界定把String类型,转换成RichString,而RichString是Ordered[String],>,<,==这些操作就可以通过Ordered[String]实现。
    这里写图片描述
    这里写图片描述
    问题:为啥不可以Int不可以直接用comparable[T]类型,因为,Int 不是comparable[Int]的子类,可以通过视图界定,将Int隐式转换成RichInt,而RichInt实现了Comparable[Int]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值