use*_*830 3 ruby ruby-on-rails dry
对不起,如果这太简单了.我正在寻找一种让我的ruby代码变干的方法:我想在同一个实例变量上调用多个方法@var = Model.new(param):
@var.method1
@var.method2
@var.method3
...
Run Code Online (Sandbox Code Playgroud)
是否可以使用该send方法编写一行代码?顺便说一下,是否可以调用块Model.new来生成更简洁的代码?
我相信DRY应该用于使您的代码更易于维护,更具可读性.我不认为它应该被用来缩短您键入的字符数,或炫耀你的代码杂技.
在一个上下文中,@ Arup和@ p11y的解决方案都很棒,但作为一般规则(在了解您的课程或方法之前),我相信写作
@var.method1
@var.method2
@var.method3
Run Code Online (Sandbox Code Playgroud)
比写作更具可读性和可维护性
%i[method1 method2 method3].each(&@var.method(:send))
Run Code Online (Sandbox Code Playgroud)
(你需要精通高级红宝石才能理解这一点)
要么
@var.method1
.method2
.method3
Run Code Online (Sandbox Code Playgroud)
(再一次,消失的行为让未来的读者更加困惑而不是有帮助)
始终考虑谁将在6个月内阅读您的代码,以及最清楚的方式让他了解正在发生的事情.
如果你构建method1,method2等等,他们使用它们返回实例本身self,你可以构建一个可链接的接口.例如:
class Foo
def method1
# do something
self
end
def method2
# do something
self
end
def method3
# do something
self
end
# more methods...
end
@var = Foo.new
@var.method1.method2.method3
# or if this gets too long
@var.method1
.method2
.method3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |