以下代码给出了编译时错误:
var appCache = window.applicationCache;
appCache.update(); // Attempt to update the user's cache.
...
if (appCache.status == window.applicationCache.UPDATEREADY) {
appCache.swapCache(); // The fetch was successful, swap in the new cache.
}
错误:
./ test.go:18:嵌入式类型不能是指向接口的指针
为什么我不能嵌入type IFile interface {
Read() (n int, err error)
Write() (n int, err error)
}
type TestFile struct {
*IFile
}
?
答案 0 :(得分:1)
语言规范不允许。规范中的相关部分:Struct types:
使用类型但没有显式字段名称声明的字段是匿名字段,也称为嵌入式字段或在结构中嵌入类型。必须将嵌入类型指定为类型名称
T
或指向非接口类型名称*T
的指针,并且T
本身可能不是指针类型。非限定类型名称用作字段名称。
指向接口类型的指针很少有用,因为接口类型可能包含指针或非指针值。
话虽如此,如果实现IFile
类型的具体类型是指针类型,那么指针值将包装在类型为IFile
的接口值中,因此您仍需要嵌入IFile
,只是实现IFile
的值将是一个指针值,例如
// Let's say *FileImpl implements IFile:
f := TestFile{IFile: &FileImpl{}}
编辑:回答您的评论:
首先,这是Go,而不是C ++。在Go中,接口不是指针,但它们表示为一对(type;value)
,其中"值"可以是指针或非指针。有关此内容的更多信息,请参阅博文:The Laws of Reflection: The representation of an interface。
其次,如果FileImpl
是一种类型,f := TestFile{IFile : &FileIml}
显然是编译时错误,那么您需要*FileImpl
和&FileImpl
的值,而不是&FileImpl{}
。例如,您需要composite literal > library(rvest)
>
> html = read_html("http://www.finviz.com/quote.ashx?t=AA&ty=c&p=d&b=1")
>
> cast = html_nodes(html, ".table-dark-row:nth-child(2) .snapshot-td2:nth-child(2)")
> cast
{xml_nodeset (1)}
[1] <td width="8%" class="snapshot-td2" align="left">\n <b>11.58B</b>\n</td>
>
形式的library(rvest)
html = read_html("http://www.finviz.com/quote.ashx?t=AA&ty=c&p=d&b=1")
cast = html_nodes(html, ".table-dark-row:nth-child(2) .snapshot-td2:nth-child(2)")
html_text(cast) %>%
gsub(pattern = "B", replacement = "") %>%
as.numeric()
,因此它应该像我在上面发布的那样。