去"未知标记"和":或预期换行"

时间:2014-07-14 16:04:35

标签: go

我在GO中实现了各种数据结构和算法,在我第一次运行BST时,我在这段代码上遇到以下错误:

func insert(t Tree, k Node) {
    var newT Tree

    if t.root==nil {
        t.setRoot(k)
    }

    else if k.key < t.root.key {
        newT.setRoot(t.root.lc, newT)
        insert(newT,k)
    }
    else {
        newT.setRoot(t.root.rc, newT)
        insert(newT,k)
    }

}

该行:

 // else is highlighted as an "unknown token" the bracket is ": or newline expected" and everything else is "unknown token"
    else {
        newT.setRoot(t.root.rc, newT)
        insert(newT,k)
    }

看着这个:

https://gobyexample.com/if-else

看起来这应该有效,所以我很困惑我在这里做错了什么

2 个答案:

答案 0 :(得分:7)

else必须与}位于同一行,因为}与行尾之间会自动插入分号。

func insert(t Tree, k Node) {
    var newT Tree

    if t.root == nil {
        t.setRoot(k)
    } else if k.key < t.root.key {
        newT.setRoot(t.root.lc, newT)
        insert(newT, k)
    } else {
        newT.setRoot(t.root.rc, newT)
        insert(newT, k)
    }
}

答案 1 :(得分:0)

当你发现自己写作时:

 if ... {
 } else if ... {
 } else if ...

最好转到switch

switch {
   case ...: blah
   case ...: blahblah
   case ...: blahblahblah
}

在你的情况下,那将是:

switch {
  case t.root == nil: t.setRoot(k)
  case k.key < t.root.key:
    newT.setRoot(t.root.lc, newT)
    insert(newT, k)
  default:
    newT.setRoot(t.root.rc, newT)
    insert(newT, k)
}