2014-01-15 224 views
0

返回值我有以下方法(S)下面的类:实例变量在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 

感谢

+0

你在哪里使用实例变量作为参数? – Linuxios

+0

好的。我的问题会更像是......一种方法返回实例变量是否正常?或者应该在方法内部修改? –

+0

@Linuxios修改了这个问题。 –

回答

1

你的第一种方法是更类似于函数式编程方法,只是我猜想,它会没有任何的好处函数编程,因为它是做文件IO,副作用小等优点

问问你自己:

这个方法的返回值是完全是它的参数的结果,它没有副作用? (例如设置增值经销商,文件IO,数据库等)

如果答案是肯定的,比create_logo应该这样来实现:

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

并调用了一套@logo。如果没有,这整个假装几乎功能编程的东西是没用的。

这种类型的实现的好处是,你可以单元测试它,它是一个有限的,小的自包含的程序的一部分,它很简单。如果上述问题的答案是否定的,那么对你来说什么都不会做。

+0

有时我有解释自己的问题。我很抱歉。我的问题更相关为...应该在方法中设置实例变量,还是应该将其设置为诸如“@logo = create_logo”的方法的返回值 - 而不是create_logo设置“@ logo'' –

+0

因此,如果实例变量不是返回,但只是在方法中设置,我想很难测试这个方法对它做了什么,对吧? –

+0

@HommerSmith:同样,这取决于create_logo为创建徽标所做的工作。如果它是一个完全依赖于它的参数的方法,请使用第一个。如果它更像是一个有副作用的内部实用程序方法,请将其设置在create_logo中。别担心,我今天也不太清楚。 – Linuxios

1

在第一个例子中,你基本上说的是@logo = @logo,这看起来很奇怪。我在一个地方被分配一个值@logo,无论是在generate方法(和只使用一个局部变量create_logo如果需要,或create_logo设置@logo按你的第二个例子。