实例变量作为Ruby中的返回值

时间:2014-01-15 17:38:17

标签: ruby

我有以下类使用以下方法:

class Ad
  def generate
    # Find logo
    @logo = create_logo(arg1,arg2...)
  end

  def create_logo(arg1,arg2,..)
    #Logic that sets @logo
    return @logo
  end
end

因此,您可以看到我使用@instance_variable作为返回值并接收方法的值。我相信通过这样做,方法更可测试,并且它以某种方式使代码清晰,但你认为这在Ruby中是正确的吗?

或者这更正确:

class Ad
  def generate
    # Find logo
    create_logo(arg1,arg2...)
  end

  def create_logo(arg1,arg2,..)
    #Logic that sets @logo
  end
end

由于

2 个答案:

答案 0 :(得分:1)

你的第一种方法更类似于函数式编程方法,除了我猜它没有函数编程的好处,因为它正在执行文件IO,副作用等。

问问自己:

此方法的返回值是其参数的结果,并且没有副作用? (设置实例变量,文件IO,数据库等)

如果答案是肯定的,那么create_logo应该像这样实现:

def create_logo(arg1,arg2,..)
  logo = some_logic()
end

并设置为@logo。如果没有,这整个假装几乎功能编程的东西是没用的。

这种类型的实现的好处是你可以对它进行单元测试,它是一个有限的,小的自包含程序的一部分,而且很简单。如果上述问题的答案是否定的,那么它对你没有任何作用。

答案 1 :(得分:1)

在第一个例子中,你基本上是在说@logo = @logo,这看起来很奇怪。我只会在@logo方法的generate方法中为create_logo分配一个值(如果需要,只需在@logo中使用局部变量,或设置{{1}根据你的第二个例子,在create_logo中。