2013-10-30 42 views
0

我的代码实际上有效,但我不确定它是否是正确的方法。它的目的是每天只允许修改某个文件一次。有很多的代码,但它大致看起来像这样:if-else和Ruby内部的方法调用类初始化方法

class Something 
    def initialize 
    if file_modified_today 
     load_file 
     #it loads variables from a file 
    else 
     @aaa = rand(1..30) 
     # ... lots of other variable assignments 
    end 
    end 
    def file_modified_today 
    #returns true or false 
    end 
    def load_file 
    #reads and loads variables from a file 
    end 
end 

我希望我的代码不会混淆。我的问题是,这种初始化类错误?我可能想到一种方法来删除if-else和方法调用初始化,也许定义类方法,并在创建实例之前使用它

+0

我不觉得这是一个坏的方法。你应该在初始化方法中做这种逻辑,而不是每个变量重复逻辑。 – Josh

+1

小无关评论:定义返回'true'或'false'的方法的惯例是以questionmarks结尾:'file_modified_today?' – hirolau

+0

@Josh - 很高兴听到,我有一种感觉,它是错误的时候我称之为“file_modified_today?”方法(thx @hirolau)和“load_file”** **我完成类的初始化之前Something – OldBoy

回答

0

我不完全确定你到底想做什么。但是,这不是initialize对象的最好方法。

为什么不尝试创建类方法呢?

class Something 

    def initialize 
    @aaa = rand(1..30) 
    end 

    def self.file 
    if file_modified_today? 
     load_file 
    else 
     new() # initialize a new object 
    end 
    end 

    def self.load_file 
    #reads and loads variables from a file 
    end 

    private 

    def file_modified_today? 
    #returns true or false 
    end 
end 

但是,您可能需要考虑采用不同的方法。看来你只想加载一个文件,如果它在那天被修改的话。你可以在#load_file方法中处理。这使得#file方法过时。因此,在这种情况下,如果修改了创建新对象的文件,则可以加载该文件。

load_file if file_modified_today? 
+0

我更喜欢OP的解决方案。初始化方法应该保持最初设置对象变量的逻辑。 – Josh

+0

@JanDintel,是的,我在我的OP中提到我可以用类方法重构我的代码...... Ruby有多种方式来做同样的事情,所以我经常怀疑我应该选择哪种方式。谢谢 – OldBoy