我已經在 Swift 游樂場的一個類中宣告了一個函式,但是當我嘗試呼叫該函式以使用輸入對其進行測驗時,它就像我試圖再次定義該函式一樣
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")
}
uj5u.com熱心網友回復:
你不能像你試圖做的那樣evaluate(...)在頂層運行命令式代碼class。你應該將這一節之外的身體Lexer類(例如,它的收盤外}):
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()-- 可能的末尾添加一個 returnreturn value
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348884.html
上一篇:添加華為套件時出現“Couldnotfindcom.huawei.hms:location:6.0.0.302”錯誤
