- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是完全的Kotlin新手,我需要一些帮助来理解以下代码。这是我在网上找到的 Kotlin 帖子
typealias genericContext<T> = Demo<T>.() -> Unit
class Demo<T> {
infix fun doThis(block: genericContext<T>) = block()
fun say(obj: T) = println(obj.toString())
}
fun main(args: Array<String>)
{
val demo = Demo<String>()
demo doThis { say("generic alias") }
}
infix
,我们可以跳过通常的方法调用语法,即
demo.doThis
并执行
demo doThis
。
typealias genericContext<T> = Demo<T>.() -> Unit
这似乎将字符串
genericContext<T>
与看起来像lambda的东西相关联,但我没有得到
.()
部分。那用函数
Demo
扩展了
()
?我对这是如何工作感到困惑。有人可以照亮吗?
最佳答案
typealias genericContext<T> = Demo<T>.() -> Unit
是类型别名。它只是在右侧给类型重新命名。这意味着doThis
中的Demo
声明与此等效:
infix fun doThis(block: Demo<T>.() -> Unit) = block()
Demo<T>.() -> Unit
类型:
Demo
作为其接收方参数,并返回
Unit
。因此,它是在
Demo
类中定义或在
Demo
类中扩展的所有函数的类型。
doThis
函数时),那么
this
将指向lambda内部的
Demo
-object。例如:
someDemo.doThis {
/* "this" is an object of type `Demo`.
* In this case it's actually "someDemo", because the implementation of "doThis"
* calls "block" on the implicit "this".
*/
this.say("Hey!")
}
关于kotlin - Kotlin中的Typealias和扩展功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54709311/
没有正确表达式类型的类型别名有什么作用? 在示例中,当另一个类型别名已存在于 BooleanLiteralConvertible 之外时,在 BooleanLiteralConvertible 中创建
作为一项学习练习,我正在尝试编写一个小型函数库。我的库中的许多函数都需要传入函数。我想为该函数“键入别名”,以便我的库的用户必须传入具有特定签名的函数。 我已经试过了: typealias Callb
我想使用 Class1 类中定义的别名。我想将它用于 Class2 import UIKit class Class1: NSObject { typealias tp = () -> Voi
我已经看到这个技巧来实现(比方说)图像类 UIImage/NSImage 的平台无关接口(interface): #if os(iOS) import UIKit typealias
我是 C# 的新手,习惯了 Swift,所以请多多包涵。 我想完全按照以下 Swift 代码描述的方式在 C# 中使用类型: typealias Answer = (title: String, is
在下面的代码中,当我直接引用 C.ID 而不是使用 ID 类型别名时,我得到一个错误,“type of expression is ambiguous without more语境”。如果它们都引用相
我真的只是加入这个社区来寻求解决一个特定问题的帮助,特别是关于如何声明一个以特定顺序保存各种信息类型的类型。对于上下文,我有下面使用的代码示例。 typealias Template = [Strin
嘿,我有一个使用类型别名的代码,这样当用户没有正确注册时,它能够向用户发送错误代码,尽管我的类型别名不起作用,这给我带来了我的类(class)突然出现的问题当我使用类型别名时成为错误类型,有人可以告诉
所以我写了一个与闭包有关的小练习程序。我试图更好地理解异步概念是如何工作的。当我尝试调用 request() 时,出现如下所示的转换错误: import UIKit let correctPassco
好吧,我已经完成了作业并阅读了我能找到的内容,但我似乎无法找到是否可以使用 Swift 来完成。我有一个到处都在使用的枚举:SomeEnum 如果它是 case 则它是一个冗长的 SomeEnum.S
根据Kotlin's lexer的出处, 有一个 typealias 关键字,它不像 yield 和 typeof 那样“保留供将来使用”。 另外,grammar reference建议 typeal
julia> typealias ERROR: UndefVarError: typealias not defined 它在 Julia:0.5 中有效,但在以上版本中无效 help?> typea
为什么编译失败?我试图减少重复的次数,因为在实际代码中类名很大,type 实际上是一个很长的名字 https://godbolt.org/z/8YarWs #include template str
我已经使用Kotlin的typealias定义了E164电话号码类型: typealias E164 = String 这使我在代码中传递电话号码时的意图更加清晰,而不仅仅是传递字符串。我认识到并没有
我的应用程序使用一个由 NSKeyArchiver 创建的文件,它引用了一个包含在外部框架中的对象。应用程序 Xcode 项目中不再提供外部框架。因此,当我尝试加载存档文件时,应用程序会在尝试解析此对
我有一个根对象,它主要由一个元组数组和一堆状态枚举组成。元组是这样描述的: typealias Program = [(Number, Statement)] 根对象目前是 NSCoding,但我想添
我有一个方法: public func someMethod(controller: Controller) { print(controller) typealias Handler
我有一个变量,它必须是 UIView,它也实现了 MTMathKeyboard 协议(protocol)。 我试过了, var keyboard: (UIView & MTMathKeyboard)
我正在处理一个多模块项目,该项目不再编译。设置是一些模块在另一个 git repo(repo“A”)中并将模块的 AAR 输出发布到 maven。然后另一个 git repo (repo "B") 通
我对 Kotlin 中的协议(protocol)组合有点生疏,我只想通过声明自定义 typealias 来组合多个接口(interface): // This doesn't work typeali
我是一名优秀的程序员,十分优秀!