【问题标题】:"cannot call value of non-function type" error when attempting to call the max(_:_:) function尝试调用 max(_:_:) 函数时出现“无法调用非函数类型的值”错误
【发布时间】:2016-08-06 21:09:10
【问题描述】:

我正在尝试调用 max 函数:max(x: T, y: T)。但是,当我输入 max(2,3) 时,我不断收到以下错误:

错误:不能调用非函数类型的值Int var a = max(2, 3)

我是初学者,我从未遇到过使用“T”类型的函数签名。与使用 max 函数相关的 SO 线程以我的方式调用它(如 max(2,3) ),所以我不确定我哪里出错了。

我正在寻找关于“T”以及如何调用支持泛型类型的函数以及如何使max 函数在比较整数 2 和 3 时返回 3 的解释。

【问题讨论】:

  • stackoverflow.com/a/33938397/2757916 显示最小/最大使用量的 SO 答案,例如 max(2,3)
  • 听起来你定义了一个名为max的变量,导致与函数max的命名冲突。虽然没有看到你的代码,但也很难说。
  • 天啊... wth... 你是绝对正确的。我终于明白错误信息在告诉我什么......
  • @AlexanderMomchliov 嗯...当时,我投票决定将这个问题作为“简单的印刷错误”关闭,因为它缺少 MCVE 和适合实际问题的标题(这个与泛型无关),因此我怀疑它对任何未来的搜索者都有多大用处。但是,如果它不会被关闭,我同意发布答案(并编辑标题)将是最好的做法 - 我已经继续这样做了。
  • @Hamish 确实是这样,但老实说,这似乎是一个相当普遍的错误。 minmax 是常见的变量名。我可以想象这会发生在其他人身上。

标签: swift generics


【解决方案1】:

问题(如you've confirmed in the comments)是你定义了一个名为max的变量,导致与函数max(_:_:)的命名冲突。

因此,解决方案是指定Swift 模块命名空间(如George suggested),以消除您指的是max(_:_:) 函数的歧义:

Swift.max(2, 3)

或者,最好考虑重命名变量。我强烈怀疑你可以给它一个更具描述性的名称(记住,the Swift API Design Guidelines 更倾向于清晰而不是简洁)。

【讨论】:

    【解决方案2】:

    你是在扩展 Int 中调用 max 吗?

    试试 Swift.max(2, 3)。

    【讨论】:

    • 嗨 George,正如 Hamish 在上面的 cmets 中所解释的,我有一个名为 max 的预定义变量,它导致了冲突。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-08-16
    • 2020-02-01
    相关资源
    最近更新 更多