英文:
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 < 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 "unknown token" the bracket is ": or newline expected" and everything else is "unknown token"
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 < 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 < t.root.key:
newT.setRoot(t.root.lc, newT)
insert(newT, k)
default:
newT.setRoot(t.root.rc, newT)
insert(newT, k)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论