【问题标题】:Error FS0001: Expected to have type string, but has type char错误 FS0001:预期具有字符串类型,但具有 char 类型
【发布时间】:2015-03-05 18:27:10
【问题描述】:

我是编程新手,这是我第一次使用 .NET 语言,所以如果这个问题听起来很愚蠢/琐碎,我提前道歉。

这是我的代码的相关sn-ps:

let isInteger (element: string) =
    let success, result = Int32.TryParse(element)
    if success then Some(result)
    else None
let removeUnnecessaryInfo (someString: string) =
    if isInteger someString.[-1] <> None then
        someString.Remove(-2, 2)
    else 
        someString.Remove(-1, 1)

但是,当我尝试在 F# Interactive 中运行它时,我收到了以下消息:

“DuplicateFileFinder.fsx(15,22): 错误 FS0001: 这个表达式应该有类型 字符串
但这里有类型 字符

即“someString.[-1]”被归类为具有 char 类型,这就是 isInteger someString.[-1] 失败的原因。

请给我一些提示,说明我可以进行哪些更改以使代码正常工作。提前谢谢!

【问题讨论】:

    标签: f#


    【解决方案1】:

    一种方法将if 更改为

     if isInteger (someString.[-1] |> string) <> None then
    

    【讨论】:

    • 谢谢——这行得通。如果可能,您能否向我解释一下为什么 someString.[-1] 被认为是 char 而不是 string?
    • 字符串是char 的数组 - 每个元素都是char
    • 就基本类型而言,字符串更像是char 的序列,恰好有一个Item 属性。在 F# 中,字符串的一部分仍然是字符串:"abc".[1..1] 得到 "b"
    • 出于好奇,someString.[-1] 的实际角色是什么?我收到了IndexOutOfRangeException
    猜你喜欢
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多