我正在尝试在 Swift 游乐场中调用一个函数,但它要求我改为声明该函数

I'm trying to call a function in a Swift playground, but it is asking for me to declare the function instead

我已经在 Swift 游乐场的 class 中声明了一个函数,但是当我尝试调用该函数以使用输入对其进行测试时,它的表现就像我正在尝试定义再次运作

    func evaluate(_ input: String) {
        print("Evaluating: \(input)")
        let lexer = Lexer(input: input)
        do {
            let tokens = try lexer.lex()
            print("Lexer output: \(tokens)")
        } catch {
            print("An error occurred: \(error)")
        }
    }
    evaluate("10 + 3 + 5")
    evaluate("1 + 2 + abcdefg")

它具体给出了错误:“函数声明主体中预期的‘{’” 我怎样才能让它成为 运行 函数??

这是完整的代码:

import Cocoa

enum Token {
    case number(Int)
    case plus
}

class Lexer {
    enum Error: Swift.Error {
        case invalidCharacter(Character)
    }
    let input: String
    var position: String.Index
    init(input: String) {
        self.input = input
        self.position = input.startIndex
    }
    
    func peek() -> Character? {
        guard position < input.endIndex else {
            return nil
        }
        return input[position]
    }
    
    func advance() {
        assert(position < input.endIndex, "Cannot advance past endIndex!")
        position = input.index(after: position)
    }

    func getNumber() -> Int {
        var value = 0
        while let nextCharacter = peek() {
            switch nextCharacter {
            case "0" ... "9":
                let digitValue = Int(String(nextCharacter))!
                value = 10*value + digitValue
                advance()
            default:
                return value
            }
        }
    }

    func lex() throws -> [Token] {
        var tokens = [Token]()
    
        while let nextCharacter = peek() {
            switch nextCharacter {
            case "0" ... "9":
                let value = getNumber()
                tokens.append(.number(value))
            case "+":
                tokens.append(.plus)
                advance()
            case " ":
                advance()
            default:
                throw Lexer.Error.invalidCharacter(nextCharacter)
            }
        }
        return tokens
    }

    func evaluate(_ input: String) {
        print("Evaluating: \(input)")
        let lexer = Lexer(input: input)
        do {
            let tokens = try lexer.lex()
            print("Lexer output: \(tokens)")
        } catch {
            print("An error occurred: \(error)")
        }
    }
    evaluate("10 + 3 + 5")
    evaluate("1 + 2 + abcdefg")
}

您不能像 class 那样在 class 的顶层 运行 命令式代码。您应该将此部分移到 外部 Lexer class 的主体(例如,它正在关闭 } 之外):

func evaluate(_ input: String) {
    print("Evaluating: \(input)")
    let lexer = Lexer(input: input)
    do {
        let tokens = try lexer.lex()
        print("Lexer output: \(tokens)")
    } catch {
        print("An error occurred: \(error)")
    }
}

evaluate("10 + 3 + 5")
evaluate("1 + 2 + abcdefg")

请注意,为了 运行 您的代码,您还必须在 getNumber() 的末尾添加一个 return - 可能 return value