Go "unknown token" and ": or newline expected"

huangapple go评论97阅读模式
英文:

Go "unknown token" and ": or newline expected"

问题

我正在使用GO实现各种数据结构和算法,在我第一次尝试实现二叉搜索树时,我在这段代码中遇到了以下错误:

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 {
    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"

根据这个链接:

https://gobyexample.com/if-else

看起来这段代码应该是可以工作的,所以我对我在这里做错了什么感到困惑。

英文:

I'm implementing various data structures and algorithims in GO, and in my first run at a BST I'm getting the following error on this code:

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

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

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

}

The line:

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

Looking at this:

https://gobyexample.com/if-else

It looks like this should work, so I'm confused what I'm doing wrong here

答案1

得分: 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)
    }
}

请注意,我只提供了代码的翻译部分。

英文:

else must be on the same line as } because of automatic semicolon insertion between } and the end of the line.

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

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

答案2

得分: 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)
}
英文:

When you find yourself writing:

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

It is probably better to move to switch:

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

In your case, that would be:

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

huangapple
  • 本文由 发表于 2014年7月15日 00:04:35
  • 转载请务必保留本文链接:https://go.coder-hub.com/24740840.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定