Ruby 如何避免实例变量初始化的丑陋
我在我的代码中一直看到这种情况Ruby 如何避免实例变量初始化的丑陋,ruby,instance-variables,Ruby,Instance Variables,我在我的代码中一直看到这种情况 class Foo def initialize(foo) @foo = foo end #... end 这还不算太糟,但更糟的是: class Foo def initialize(foo,baz,bar,a,b,c,d) @foo = foo @baz = baz @bar = bar #etc... 你可以通过这样做来解决这个问题 @foo, @baz, @bar = foo, baz, bar
class Foo
def initialize(foo)
@foo = foo
end
#...
end
这还不算太糟,但更糟的是:
class Foo
def initialize(foo,baz,bar,a,b,c,d)
@foo = foo
@baz = baz
@bar = bar
#etc...
你可以通过这样做来解决这个问题
@foo, @baz, @bar = foo, baz, bar
但即使这样也感觉不对,打字也很烦人。是否有更好的方法根据参数定义实例变量
编辑:
这个问题似乎有两种不同的解决方案。见:
class Foo2
不需要定义一个额外的<代码>初始化方法……
,您可能需要考虑使用A:class Foo2
根本不需要定义额外的
initialize
方法…是的,这是在Ruby中初始化实例变量的首选方法。打字可能很烦人,但这是一种很好理解的模式。在Ruby中,使用元编程将其自动化是可能的,但会使代码更难理解
我还认为,当一个类包含两个或三个以上的参数时,让它看起来丑陋可能是一件好事。如果您的类依赖于六种不同的功能,那么它很适合重构。是的,这是在Ruby中初始化实例变量的首选方法。打字可能很烦人,但这是一种很好理解的模式。在Ruby中,使用元编程将其自动化是可能的,但会使代码更难理解
我还认为,当一个类包含两个或三个以上的参数时,让它看起来丑陋可能是一件好事。如果您的类依赖于六种不同的功能,那么它是重构的有力候选对象。我认为有三种方法可以缩短实例变量的初始化时间:
我认为有3种方法可以缩短实例变量的初始化时间:
def initialize args
@foo, @baz, @bar = *args
end
class Foo < Struct.new(foo,baz,bar,a,b,c,d)
end
foo = Foo.new(1,2,3,4,5,6,7)
foo.bar #=> 2