gpt4 book ai didi

swift - 我如何在 `#function` 函数中使用 `inline` 符号?

转载 作者:可可西里 更新时间:2023-11-01 00:57:17 28 4
gpt4 key购买 nike

我想用函数的名字来解决一些问题,但是#function似乎不能很好地与@inline(__always)一起工作,这是我的代码:

@inline(__always) func log() {
print(#function)
}
func a() { log() } // want 'a()', but got 'log()'
func b() { log() }
func c() { log() }
//...

谁能解释一下?或者这只是一个愚蠢的想法。

最佳答案

如果你的意图是打印调用函数的名称log(),那么你应该将它作为默认参数传递(它被评估在调用者的上下文中),如图所示在 Building assert() in Swift, Part 2: __FILE__ and __LINE__在 Swift 博客中。

例子:

@inline(__always) func log(_ message: String, callingFunction: String = #function) {
print("\(callingFunction): \(message)")
}

func a() { log("Hello world") }
func b() { log("Foo") }
func c() { log("Bar") }

a() // a(): Hello world
b() // b(): Foo
c() // c(): Bar

无论 log 函数是否内联,这都有效。(内联不会改变程序的语义。特别是,这并不意味着 func log 的源代码包含在func a() 的源代码并编译为一个函数。)

关于swift - 我如何在 `#function` 函数中使用 `inline` 符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274319/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com