Custom Struct方法无法设置struct成员

时间:2015-12-23 06:57:31

标签: ruby

一个例子将解释这个问题:

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明显不为零时会出现此错误?有没有办法使这项工作?

2 个答案:

答案 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