F# 函数式编程:为什么我会收到类型不匹配错误?

问题描述 投票:0回答:1

作为 F# 公认的新手,我很难理解为什么会出现此错误。 这是我公认的琐碎且冗余的代码:

open System
open System.Globalization

let toUpperCase (input: string) = 
    input.ToUpper()

let uCaseAll (input: string) = 
    input.Split()
    |> Array.map toUpperCase
    |> String.concat " "

[<EntryPoint>]
let main argv =
    let text = "You’re in the right place. Tell us what titles or genres you’ve enjoyed in the past, and we’ll give you surprisingly insightful recommendations."
    printfn "Result: %s" uCaseAll text

我收到的错误是:

Type mismatch. Expecting a
    'string -> 'a -> int'    
but given a
    'string -> unit'    
The type ''a -> int' does not match the type 'unit'

This expression was expected to have type
    'string'    
but here has type
    'string -> string' 

这让我很困惑,因为我的函数被明确定义为接受字符串并返回字符串。 然而编译器认为我正在用

int
s 和
uint
s 做一些事情。

我做错了什么?

.net functional-programming f#
1个回答
0
投票

唯一的问题在最后一行。 F# 认为您正在使用三个参数调用

printfn
。您只需要一对括号先调用
uCaseAll text
,然后将结果发送到
printfn
:

printfn "Result: %s" (uCaseAll text)
© www.soinside.com 2019 - 2024. All rights reserved.