eti*_*eti 5 ruby ruby-on-rails
将多个自定义方法链接在一起的最佳方式是什么?我想以一种优雅的方式将我的方法的输出直接放入下一个方法中。下面的第一个是我现在所拥有的。
verified = search_verified(@providers)
matching = search_matching(verified)
deactivated = search_deactivated(matching)
networks = search_networks(deactivated)
designations = search_designations(networks)
disorders = search_disorders(designations)
age_groups = search_age_groups(disorders)
governing = search_governing(age_groups)
search_availabilities(governing)
Run Code Online (Sandbox Code Playgroud)
也许更多的是:
search_verified(@providers)
>> search_matching
>> search_deactivated
>> search_networks
>> ....
Run Code Online (Sandbox Code Playgroud)
search_verified(@providers)
.then { search_matching(_1) }
.then { search_deactivated(_1) }
.then { search_networks(_1) }
.then { search_designations(_1) }
.then { search_disorders(_1) }
.then { search_age_groups(_1) }
.then { search_governing(_1) }
.then { search_availabilities(_1) }
Run Code Online (Sandbox Code Playgroud)
你可以按照这些思路做一些事情。Ruby 2.6.0 引入了then, 以及函数组合运算符<<和>>。
您确实必须选择方法,method(:method_name)因为method_name它本身会调用该方法并且不会返回它。
@providers.then(&
method(:search_verified) >>
method(:search_matching) >>
method(:search_deactivated) >>
method(:search_networks) >>
method(:search_designations) >>
method(:search_disorders) >>
method(:search_age_groups) >>
method(:search_governing) >>
method(:search_availabilities)
)
Run Code Online (Sandbox Code Playgroud)
如果你不喜欢“头顶”这个角色。method您可以通过首先将方法存储在较短的变量中来减少字符数:
fn = method(:method)
@providers.then(&
fn[:search_verified] >>
# ...
)
Run Code Online (Sandbox Code Playgroud)
小智 -2
这取决于您真正需要什么数据以及如何定义代码的架构,我通常创建一个Service 对象。
如果您只想返回最后一个方法的输出。return search_availabilities(governing)。
如果您需要所有变量,您可以让它返回一个包含所有变量或您需要的变量的数组。return [verified, matching, deactivated, ...]。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |