我有以下类使用以下方法:
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 :(得分: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
中。