在ruby中,我应该使用实例变量还是直接方法调用

时间:2015-09-07 11:59:16

标签: ruby variables methods

我正在写一个涉及多种方法的课程。 但是,每个方法的最终结果都保存在实例变量中,以便其他方法可以访问它们。 但是在ruby中,方法调用会返回最后一个值,这种方法也可以采用。但我感到困惑的是,哪种方法在程序上是正确的,而且更像红宝石。

我的代码的例子就是这个

方法1: - 方法调用

class Foo
  def cat
    "This is a cat"
  end
  def bigcat
     cat
  end
end
mycat = Foo.new
mycat.cat
mycat.bigcat
Output:- This is a cat
         This is a cat

方法2: - 实例变量

class Foo
  def cat
    @cat_talk = "This is a cat"
  end
  def bigcat
     @cat_talk
  end
end
mycat = Foo.new
mycat.cat
mycat.bigcat



Output:- This is a cat
         This is a cat

上面的例子可能看起来很简单,但在我的ruby类中,实现更复杂,更大。

2 个答案:

答案 0 :(得分:1)

我建议这样的事情(备忘录):

class Foo
  def cat
    @cat_talk ||= "This is a cat"
  end
  def bigcat
     cat
  end
end

mycat = Foo.new
mycat.cat
mycat.bigcat

Output:- This is a cat
         This is a cat

通常恕我直言,在包装变量而不是直接访问变量时调用方法会更好。如果你想要例如大写它,你可以包裹cat并保留实际数据。

答案 1 :(得分:1)

您可以重命名实例变量并使用访问器方法,而不是定义方法bigcat

基于dimitris answer的示例:

class Foo
  def cat
    @bigcat ||= "This is a cat"
  end
  attr_reader :bigcat
end

mycat = Foo.new
mycat.cat
mycat.bigcat

如果您想保留变量名称,可以将其与alias

结合使用
class Foo
  def cat
    @cat_talk ||= "This is a cat"
  end
  attr_reader :cat_talk
  alias :bigcat :cat_talk
end

mycat = Foo.new
mycat.cat
mycat.cat_talk
mycat.bigcat

除了您的问题,仅供参考:您还可以使用attr_writer定义一个写入方法。