一个例子将解释这个问题:
Val = Struct.new(:value) do
def inc
p value
value = value + 1
end
end
v = Val.new(1)
v.inc
输出将是:
1
undefined method `+' for nil:NilClass (NoMethodError)
为什么value
明显不为零时会出现此错误?有没有办法使这项工作?
答案 0 :(得分:5)
<style>
.k-nav-today {
border-radius: 0px !important;
}
.k-nav-prev {
float: left;
border-width: 1px 0 1px 1px !important;
border-radius: 4px 0 0 4px;
}
/*left arrow*/
.k-i-arrow-w {
background-image: url("http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/16/Actions-arrow-right-icon.png") !important;
background-position: initial !important;
}
/*right arrow*/
.k-i-arrow-e {
background-image: url("http://icons.iconarchive.com/icons/oxygen-icons.org/oxygen/16/Actions-arrow-right-icon.png") !important;
background-position: initial !important;
}
</style>
答案 1 :(得分:3)
澄清塞尔吉奥的答案。
在inc
的定义中,最初没有变量value
,而p value
调用的是方法value
,它返回1
然后在行value = value + 1
中,在解析value =
时,创建局部变量value
并将其初始化为nil
。即使在将值分配给新创建的value + 1
之前评估value
,也会首先进行value
的初始化。因此,当要评估value + 1
时,已经有一个局部变量value
,它优先于方法value
调用。此值为nil
。