【问题标题】:Cannot convert value of type '(Float) -> FormExpression' to expected argument type '(_) -> FormExpression'无法将“(Float) -> FormExpression”类型的值转换为预期的参数类型“(_) -> FormExpression”
【发布时间】:2018-11-24 04:32:56
【问题描述】:
indirect enum FormExpression {
   case float(Float)
   case reference(String,Int)
   case infix(FormExpression,String,FormExpression)
   case function(String,FormExpression)
}
extension FormExpression {
    static var floatParser:FormParser<FormExpression> {
        return { FormExpression.float($0) }<^>float
    }
 }

infix operator <^> : SequencePrecedence 
func <^><A,B>(lhs:@escaping(A)->B,rhs:FormParser<A>) -> FormParser<B> { 
    return rhs.map(lhs) 
}

这是我练习闭包和函数式 Swift 的代码。现在它显示一个

错误 - '无法将类型 '(Float) -> FormExpression' 的值转换为 预期参数类型'(_) -> FormExpression''

。而且我试了好几次,还是不知道怎么办。希望有人能帮忙解决一下,解释一下原因。谢谢

【问题讨论】:

  • &lt;^&gt; 运算符从何而来?您是否在使用任何 3rd 方框架?
  • infix operator &lt;^&gt; : SequencePrecedence func &lt;^&gt;&lt;A,B&gt;(lhs:@escaping(A)-&gt;B,rhs:FormParser&lt;A&gt;) -&gt; FormParser&lt;B&gt; { return rhs.map(lhs) }
  • 这是练习项目的地址:(github.com/objcio/functional-swift)。我修改了一些代码let float = digit.many1.map { Float(String($0))! }
  • @MartinR,我添加了解释
  • 感谢之前提过建议的朋友,第一次问,没看懂问题的格式。这是我的问题,对不起

标签: swift closures


【解决方案1】:

我解决了这个问题,但有点好笑。

我刚刚修改了“float”对象的名称,并将“float”更改为“floater”。就是这样。

这两个不同命名的对象本质上是相同的,但另一个是错误的。 ,我现在觉得可能是Swift中的命名冲突导致的,但是我没有能力找到真正的原因,有兴趣有能力的朋友可以试试看原因

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2016-07-27
    • 2016-07-02
    • 2016-03-21
    • 1970-01-01
    • 2020-03-01
    相关资源
    最近更新 更多