Это автономное решение:
$(window).load(function() {
$('img').each(function() {
if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) {
// image was broken, replace with your new image
this.src = 'http://www.tranism.com/weblog/images/broken_ipod.gif';
}
});
});
Он не «получает» значение. Go строго типизирован, поэтому, если предписывается указатель на T, указатель на T (*T
) является единственной опцией, которая может случиться как значение для такого типизированного места.
«Магия» находится в компиляторе, который эффективно «переписывает» ваш код в определенных условиях :
Вызов метода
blockquote>x.m()
действителен, если набор методов (тип)x
содержитm
, а список аргументов может быть назначен списку параметровm
. Еслиx
адресуется, а набор методов & amp; x содержитm
,x.m()
является сокращением для(&x).m()
:Связано: Наборы методов
Разница, которую предлагает тур, фактически не изменяет v := &Vertex{3, 4}
на v:= Vertex{3, 4}
, а скорее изменяет определения этих двух методов, чтобы они работали над значениями вместо указателей. Так, например, для Scale
, func (v *Vertex) Scale(f float64) {...
становится func (v Vertex) Scale(f float64) {...
(обратите внимание, что (v *Vertex)
, значение указателя, становится (v Vertex)
, значением без указателя). В обоих случаях вы должны оставить объявление v
как v := &Vertex{3, 4}
.
Вы заметите, что в первом случае, когда методы принимают указатели, вывод будет &{15 20} 25
. Однако, когда методы принимают значения, а не указатели, выход равен &{3 4} 5
.
В обоих случаях v
является указателем на объект Vertex
. В первом случае указатель передается методам, и все работает так, как ожидалось - любые изменения, внесенные в объект Vertex
, производятся с исходным значением, поэтому эти изменения сохраняются после возвращения метода. Во втором случае, хотя v
все еще является указателем, компилятор Go достаточно умен, чтобы преобразовать v.Scale(5)
в (*v).Scale(5)
, где v
разыменовывается, а результирующее значение передается в Scale
.
v
не является указателем в моем случае.Scale
может просто относиться к нему так, как если бы он был одним? – sjakobi 1 August 2013 в 15:56Scale
не может рассматривать указатель не указателя как указателя. Выдержки из отрывков в ответе объясняют, почемуScale
получит&v
в качестве приемника, неv
. – zzzz 1 August 2013 в 16:05