【问题标题】:Idiomatic Ruby for breaking up method definition [closed]用于分解方法定义的惯用 Ruby [关闭]
【发布时间】:2019-03-06 18:26:26
【问题描述】:

我正在尝试将一条线切成碎片

define_method("start_#{event}!") do |user_or_enrollment, setting_name = nil, node_id = nil|

拆分这些长方法调用行的常规样式是什么?

【问题讨论】:

    标签: ruby idioms


    【解决方案1】:

    惯例是你通常不会像那样拆线,你只是处理它。即使您努力做到这一点,也并非所有内容都可以整齐地表达为短线。

    使行更短的一种方法是减少变量名的长度:

    define_method("start_#{event}!") do |on, setting = nil, node = nil|
    

    或者使用选项样式定义:

    define_method("start_#{event}!") do |on, options = { }|
    

    你怎么称呼它:

    start_x!(user, setting: setting_name, node_id: node.id)
    

    【讨论】:

    • 第一种方法比传递哈希要好,只传递一个哈希会掩盖方法的参数。方法的参数是明确的、自给自足的文档,说明了使方法运行所需的内容。
    • @Зелёный 自我记录失败时,文档可以接管。
    【解决方案2】:

    块参数可以分成多行,就像定义方法参数时一样:

    define_method("start_#{event}!") do |
                                         user_or_enrollment,
                                         setting_name = nil,
                                         node_id = nil
                                        |
      # method body
    end
    

    或者,您可以根据个人喜好进行不同的缩进,例如

    define_method("start_#{event}!") do |
      user_or_enrollment,
      setting_name = nil,
      node_id = nil
    |
      # method body
    end
    

    具体格式取决于您。在这种情况下,各种风格指南会推荐不同的东西。但是,他们通常都同意最好保持参数的数量较少,并尽可能避免将参数或参数列表拆分为多行。

    【讨论】:

      【解决方案3】:

      这主要基于意见。我会选择:

      define_method(
        "start_#{event}!"
      ) do |user_or_enrollment, setting_name = nil, node_id = nil|
      

      【讨论】:

        猜你喜欢
        • 2013-09-09
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        • 2013-02-17
        • 2014-03-16
        • 2012-10-08
        • 1970-01-01
        • 2016-06-15
        相关资源
        最近更新 更多