假设我有一个用户类,如下所示
class User
def initialize
test
end
def test
name = ['name1','name2', 'name3']
returned_value = test1(name)
lots of if else condition based on returned_value
end
def test1(name)
test2(name)
end
def test2(name)
test3(name)
end
def test3(name)
end
end
这个用户类有一些方法,比如test,test1 ..每个方法都做一些单个数组的计算,然后返回数组。现在基于返回值测试方法添加或删除数组中的元素。由于返回的值可能是空白的,一个元素,二维数组等等,因此很多if else条件变得非常难看。
但是如果我使用实例变量,那么我就不必返回任何值,因此我根据返回的值不需要任何if else语句,我的代码看起来很干净。例如
class User
def initialize
@name = ['name1','name2', 'name3']
test
end
def test
test1
end
def test1
test2
end
def test2
test3
end
def test3
end
end
我的问题是,在这种情况下我应该使用实例变量吗?解释会很好。
更新 简而言之,我想在一个类的不同方法中操纵一个单独的数组。现在,我可以在test方法中创建数组,然后将其传递给其他方法(在上面的例子中的第一种情况)或者我可以在initialize方法中创建数组,然后我不必每次都传递数组(我上面例子中的第二个案例)。所以我的问题是
我的第一种/第二种方法是不好/好吗?或者两种方法都可以使用?
答案 0 :(得分:1)
如果您的数据需要可以被类中的许多方法访问,那么实例变量是管理它的好方法。
我通常在PORO类中使用实例变量有两个原因
例如,为了避免每次访问customer_data时都进行api调用,我会替换
def customer_data
HTTParty.get... (some api call)
end
与
def customer_data
@customer_data ||= HTTParty.get... (some api call)
end
@customer_data
仅在该方法中使用,但如果我多次调用该方法,则只需要一次api调用。这假设(当然)对于给定的类对象,只有一个关联的客户。