请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

subType.typeParameter.let(::println) 这个我也不懂

不是说要打印typeParameter父类的类型吗?
因为typeParameter已经有lazy帮我们属性代理了,所以可以通过subType.typeParameter获取到父类的type类型;
然后这个.let(::println)我就不懂了,为啥不是直接println(subType.typeParameter)打印出来,而是使用let呢?
println这个函数作为参数传入了let里面是打印前面的东西吗?感觉好难理解这个的原理;可能是老师前面也没怎么讲let的用法吧,我只知道let可以在{}里面用it,你也没说可以在let()传进一个参数啊,也不知啥原理,
感觉应该是第一个参数可以变成let{::println},但是也不知道引用了这个函数为啥能打印前面的东西

正在回答 回答被采纳积分+3

7回答

bennyhuo 2024-10-27 08:42:05
另外,实在学不会,你也可以选择退款哈。
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    退不了款,你给我退吗?我可以联系你的,因为视频看过超过一分钟我就不能退了噢
    回复 有任何疑惑可以回复我~ 2024-10-27 12:56:14
  • bennyhuo 回复 提问者 zippen #2
    那。。好吧,我不太了解平台是怎么运营的,退不了就只能辛苦同学继续学了 :)
    回复 有任何疑惑可以回复我~ 2024-10-28 09:55:45
bennyhuo 2024-10-27 08:41:01
同学很抱歉这部分内容你不理解。

let(::println)为什么能执行?
结合我们之前讲过的,我们完全可以这么写对吗?
let{  println(it)  }
let({ println(it) })

{ println(it) }的类型是 (T) ->Unit,这个作为 let的参数能理解吧?
println 的类型是 (Any) ->Unit,::println 作为 let的参数也是可以的。
这其实就是函数的类型的基本概念。

为什么能打印?

{ println(it) } 传入let之后要执行,::println传入之后也是会执行的。执行谁呢?当然是执行 println。
这其实就是函数引用的作用。

我建议同学去复习相关知识,其实就是觉得同学对这块儿内容还没有消化,需要多做一些实验感受一下。没有敷衍你的意思,我要是想敷衍你,完全没必要一个一个给你把视频找出来。

我这边跟很多同学都保持了私下联系,其实绝大多数同学对这个部分是没有疑问的,很多同学甚至嫌这些内容简单。课程内容设计也是为了兼顾更多同学的诉求。请同学多理解哈。

手机码字比较费劲,请同学多多包涵。我也是在认真回答你的,有问题提出来讨论,你跟我生气也解决不了问题,不是吗?
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    抱歉了,是我半夜看到你发那5条信息,就一股说不清的生气,早上起来也发现自己过分了,但是你在视频里面也没说let(::println)可以变成let{  println(it)  }啊,而且在我的理解里面let(::println)变成let{::println}我可以理解,就像你之前视频里面说过的,函数的参数第一个是可以变成{}里面的,但是我又有疑问了,it是怎么成了在println里面的呢?就是说let里面只要传入函数的引用,就相当于把it传进函数里面,这个我保证你肯定没说过,不信你自己看看你自己的视频,几分几秒给我指出来,我就服你,也不是我没百度,我百度了一下let(::println),ai也问了,根本找不到答案才来问你的,还有我还去b站上看let的教学视频,里面通常都是函数.let{it}里面用it,根本就没说如果传入函数,就会把it传进去,我感觉是你没讲仔细,也不会为了这个方法单独新拍一个视频,那我想问了,如果不是println,是其他函数,只要是传入它的引用,都是let{a(it)}的效果吗?这个你在视频里面肯定没说过,别的同学没有问,只是因为他们看得不仔细。我个人觉得是你没讲清楚,不是我去复习,是你根本没讲这个知识点
    回复 有任何疑惑可以回复我~ 2024-10-27 12:49:30
  • 提问者 zippen #2
    ok,我好像弄懂了,应该是T就是it,如果是引用函数的话,T就会作为参数it传入引用函数。但是我感觉你这句话就是有点那个啥了《我这边跟很多同学都保持了私下联系,其实绝大多数同学对这个部分是没有疑问的,很多同学甚至嫌这些内容简单。课程内容设计也是为了兼顾更多同学的诉求。请同学多理解哈。》好像是在说哎呀同学你太笨了,很多同学都嫌弃太简单了,不会请看那个视频多一遍。渺小,必须细说。还好是早上我并不会生气,因为不懂就问嘛,问的多自然就会了。老师对不起,是我太笨了TT
    回复 有任何疑惑可以回复我~ 2024-10-27 16:36:47
  • bennyhuo 回复 提问者 zippen #3
    请注意哈,let(::println) 和 let{  println(it)  } 语法上不是等价的(虽然结果都是打印),这里拿出来举例还是为了同学能够理解。 ::println 是一个函数对象, { println(it) } 也是一个函数对象,这两个对象从语法上并不相同(前者是 println 的函数引用,后者是一个新的 lambda 里面调用了 println),传给 let 的话函数对象都是会被调用的。另外, let { ... } 和 let({ ... }) ,这两个是等价的,前者实际上是后者的简化写法,这个写法我们在介绍函数的时候专门做了动画演示哈,是必须要掌握的用法。
    回复 有任何疑惑可以回复我~ 2024-10-28 10:02:25
bennyhuo 2024-10-26 23:13:26
同学,这些知识我们都有讲到,建议同学仔细从头学习,并且多多练习哈,基础扎实是进阶的必要条件。
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    我真是被你气死了
    回复 有任何疑惑可以回复我~ 2024-10-27 01:06:43
  • 提问者 zippen #2
    我有很认真在学,但是你总是答非所问,让我去回去看这个视频那个视频,我回去看了,也没找到答案啊,你很显然没认真看了我问了什么,函数的类型和函数引用,我会,函数作为let的函数参数,我也懂,但是我问的是let(::println)为啥会打印前面的东西,我要问的问题是这个,别总搞得我好像没认真学一样,搞得我很火大,真的被你搞无语了,认认真真的在学习,被你搞得我好像没认真学,我的努力这样就被你否定了
    回复 有任何疑惑可以回复我~ 2024-10-27 01:34:09
  • 提问者 zippen #3
    如果说我基础知识不够的话,我怎么就能看得懂8-7和8-8呢?我看这个问题也有别的同学问,问得跟我一模一样,但是你也没有认真回答他,也没给他答案,谁不知道这个是函数引用啊?问题是作为参数传入到let里面,为啥能够打印subType的东西,到底是什么原理?我觉得你根本没讲清楚,作为老师不认真回答学生问题,总是让别人看你所指的视频,问题是你那个视频也没讲得很清楚啊,如果讲得很好就不会有第二个学生问同样的问题,这就是你回答上一个同学不认真导致的。我所需要的是你认真回答问题,不是发一堆你都讲不清楚的视频,还连续发了5条,看得我火大,其实我很想忍住不骂你,因为我问的上一个问题你也是这么敷衍,还是我靠ai才弄明白,要你何用?
    回复 有任何疑惑可以回复我~ 2024-10-27 03:20:55
bennyhuo 2024-10-26 23:12:37
函数的类型和函数引用,见3-5节。
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    函数的引用我真的会啊。。无语了,不就是::带个函数名吗?。。。答非所问
    回复 有任何疑惑可以回复我~ 2024-10-27 01:05:59
bennyhuo 2024-10-26 23:11:30
函数作为函数参数,见6-1节高阶函数
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    有时候看到你的回复真的有点生气,我是认真看了,但是你是真的没说啊,比如6-3的3分15秒,你就说了一下可以传入函数的引用,然后就跳过了呀
    回复 有任何疑惑可以回复我~ 2024-10-27 01:03:55
bennyhuo 2024-10-26 23:10:35
let的用法我们在6-3节专门有讲解
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    老师,我又回去看了,你也没说啊,只说了X.let{ it} 里面的it表示的是X,X.apply{this}里面的this是X,只是很潦草的说了出来,然后就说了可以把函数的引用传进去,然后就啥也没说就跳过了,我不是没认真看,是你根本没说好吧。。。其实关于这几个内置的方法你都是草草略过的,只介绍了里面的it和this,哪里有说传入函数的引用有啥用?请你列举具体是哪一分钟哪一秒说了?就是没说啊
    回复 有任何疑惑可以回复我~ 2024-10-27 01:01:20
bennyhuo 2024-10-26 23:09:55
let 函数的参数是个函数。
::println是 println函数的引用。
let(::println)就是把println的引用作为let的参数传入。
0 回复 有任何疑惑可以回复我~
  • 提问者 zippen #1
    let(::println)就是把println的引用作为let的参数传入。这个我知道啊,只是为啥作为let的参数传入了之后就可以打印了?println后面也没有打印的东西啊,比如println("xxx")会打印xxx,但是只是把它作为引用传入let就能打印是我不能理解的
    回复 有任何疑惑可以回复我~ 2024-10-27 00:51:31
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信