- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否有等同于 Swift's @autoclosure
feature 的东西
本质上,我希望能够在一个函数或构造函数/初始化器中创建一个参数,它可以接受另一个接受参数的函数,并执行它:
class Step(handler: () -> Unit) {
init {
handler()
}
}
Step(aFunctionThatTakesParameters(parameter: String)) // <- Is there a way to get something like this working?
作为引用,Swift 中的等效代码如下所示:
struct Step {
init(_ handler: @autoclosure () -> Void) {
handler()
}
}
Step(aFunctionThatTakesParameters(parameter: ""))
最佳答案
我在链接中打开了自动闭包的 Swift 文档: https://docs.swift.org/swift-book/LanguageGuide/Closures.html#ID543
引用这段代码:
var customersInLine = ["Chris", "Alex", "Ewa", "Barry", "Daniella"]
print(customersInLine.count)
// Prints "5"
let customerProvider = { customersInLine.remove(at: 0) }
print(customersInLine.count)
// Prints "5"
print("Now serving \(customerProvider())!")
// Prints "Now serving Chris!"
print(customersInLine.count)
// Prints "4"
然后我编写了以下代码以将 Swift 翻译成 Kotlin:
val customersInLine = mutableListOf("Chris", "Alex", "Ema", "Barry", "Daniella")
println(customersInLine.size)
// Prints "5"
val customerProvider = { customersInLine.removeAt(0) }
println(customersInLine.size)
// Prints "5"
println("Now serving ${customerProvider()}!")
// Prints "Now serving Chris!"
println(customersInLine.size)
// Prints "4"
虽然这似乎没有提供您正在寻找的预期输出,但您可以按照...做更多的事情
class Step (handler: () -> Unit) {
init {
handler()
}
}
fun myParamFunction(a: String, b: String) {
a + b
}
Step {
myParamFunction("Hello ", "there")
}
在这种情况下,Kotlin 能做的最好的事情就是采用一个纯 lambda 函数,并在内部调用一个已给定要调用的参数的函数。
关于Kotlin 等同于 Swift 的 `@autoclosure`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54182352/
对这个有点惊讶。在 Swift 3 中,这段代码编译... class func test(foo:@autoclosure () -> Void) { } 但这不... typealias Void
考虑以下函数: func whatever(foo: @autoclosure () -> Int) { let x = foo() print(x) } 当然,我们可以这样调用它: what
??的定义运算符是: public func ??(optional: T?, defaultValue: @autoclosure () throws -> T) rethrows -> T 为什么
我今天又开始玩 Swift 并且需要一个 undefined()功能。基本上,一个函数可以是您想要的任何类型,但在实际运行/评估时会崩溃。如果您还没有时间实现某个表达式但想查看程序类型是否检查,这将很
考虑这样的代码: func log(_ msg: @autoclosure @escaping () -> Any?) { print(msg) } class Foo { let b
我注意到在 Swift 中编写 assert 时,第一个值被键入为 @autoclosure() -> Bool 使用重载方法返回通用 T 值,通过 LogicValue protocol 测试是否存
我想知道是否有等同于 Swift's @autoclosure feature 的东西 本质上,我希望能够在一个函数或构造函数/初始化器中创建一个参数,它可以接受另一个接受参数的函数,并执行它: cl
我正在使用 Xcode 8 将代码转换为 Swift,但编译器警告在一些已在 Swift 2.3 中使用闭包语法创建的嵌套函数中添加 @escape。我还发现了一些其他关键字 @noescape 和
我在 Swift 周围闲逛,发现 fatalError 有这个签名: @noreturn public func fatalError(@autoclosure message: () -> Stri
我刚刚将 Xcode 更新到 6.3,以前在 Xcode 6.2 中编译的 Swift 代码现在无法编译。 import Foundation public enum Result { cas
既然 @autoclosure 是参数声明的一部分而不是类型,那么如何声明函数采用可变数量的自动闭包? 之前: public func coalesce(all : @autoclosure () -
我想在 dispatch_async block 中调用一个@autoclosure 参数。 func myFunc(@autoclosure condition: () -> Bool) { d
我是一名优秀的程序员,十分优秀!