请选择 进入手机版 | 继续访问电脑版

risc-v中文社区

 找回密码
 立即注册
查看: 1200|回复: 1

[原创] risc-v开发基础 Scala 路径依赖路径1---(29)

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-8-28 09:16:36 | 显示全部楼层 |阅读模式
class Outer {
  private val x = 1
  class Inner {
    private val y = x + 5
  }
}
object PathDependTest {
  def main(args: Array[String]): Unit = {
    val outer1 = new Outer
    val inner1 = new outer1.Inner
//    val inner1 = new Outer.Inner //错误声明 new 不能是Outer.Inner,只能是outer1.Inner
    //还可以显示声明类型
    //val inner1: outer1.Inner = new outer1.Inner  //上面错误声明以及本句的显示声明类型outer1.Inner就已经表明:与路径名称有关
    val outer2 = new Outer
    val inner2 = new outer2.Inner

    //如果将outer2.Inner类型赋值给outer1.Inner类型,结果会如何呢?
//    val o1i : outer1.Inner = new outer2.Inner //结果IDEA提示:类型不匹配
    //上句错误“基本上“可以给出结论:路径依赖的是与名称有关,与类型或引用的实例无关(因为实例都是同一个类型)
    val outer3 = new Outer
    val outer4 = outer3  
    val inner3 = new outer3.Inner
//    val inner4: outer4.Inner = inner3 //outer4和outer3其实都是引用同一个对象,但两者的内部类不能互相赋值引用
//    val inner4: outer4.Inner = new outer3.Inner //new一个outer3的内部类也不能互相赋值引用
//    上面二句都提示类型错误,彻底说明:路径依赖是与名称相关,与引用的实例的类型无关
  }
}

回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-8-28 17:50:00 | 显示全部楼层
val outer3 = new Outer
val outer4 = outer3
val inner3 = new outer3.Inner

outer3.method(inner3)
outer3.method(new outer4.Inner)
将val outer3或val outer4的定义改为var,则出现错误:stable identifier required
这说明在路径依赖中,所有的路径中的对象都不能是可变的,只能是val不可变
这其实应该很好理解,如果可变,那最终到底引用的是什么呢,谁都不知道,当然不行。

回复

使用道具 举报

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

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-16 17:07 , Processed in 0.022221 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表