这有什么约定?
我使用下面的样式,但不确定它是首选的样式,因为如果我最后错过了一个点,我可能会遇到很多问题而没有意识到这一点。
query = reservations_scope.for_company(current_company).joins{property.development}.
group{property.development.id}.
group{property.development.name}.
group{property.number}.
group{created_at}.
group{price}.
group{reservation_path}.
group{company_id}.
group{user_id}.
group{fee_paid_date}.
group{contract_exchanged_date}.
group{deposit_paid_date}.
group{cancelled_date}.
select_with_reserving_agent_name_for(current_company, [
"developments.id as dev_id",
"developments.name as dev_name",
"properties.number as prop_number",
"reservations.created_at",
"reservations.price",
"reservations.fee_paid_date",
"reservations.contract_exchanged_date",
"reservations.deposit_paid_date",
"reservations.cancelled_date"
]).reorder("developments.name")
query.to_a # ....
那么链接方法对多行的约定是什么?我应该选择哪一种呢?
注意:我找不到Ruby coding style guide的好例子。
答案 0 :(得分:50)
Ruby style guide中实际上有一节介绍:
采用一致的多行方式链式。那里有两个 Ruby社区中的流行风格,两者都被考虑在内 良好 - 领先
.
(选项A)和尾随.
(选项B)。
(选项A)继续进行链式方法调用时 另一行将
.
保留在第二行。# bad - need to consult first line to understand second line one.two.three. four # good - it's immediately clear what's going on the second line one.two.three .four
(选项B)在另一条线上继续链式方法调用时, 在第一行包含
.
以表示 表达继续。# bad - need to read ahead to the second line to know that the chain continues one.two.three .four # good - it's immediately clear that the expression continues beyond the first line one.two.three. four
可以找到关于两种替代风格的优点的讨论 here
答案 1 :(得分:32)
在Ruby 1.9+中,可以像这样写:
query = reservations_scope
.for_company(current_company)
.joins{property.development}
.group{property.development.id}
.group{property.development.name}
.group{property.number}
.group{created_at}
.group{price}
.group{reservation_path}
.group{company_id}
.group{user_id}
我认为更具可读性。
答案 2 :(得分:22)
以下是四个选项的完整的优缺点列表。其他答案中没有提到其中两个选项。
优点和缺点可以分为独特的和共享的。共享专业人士是另一种选择的独特骗局的逆转。同样,共享缺点是另一个选项的独特专家的反转。对于其他两个选项而言,还有一些优点是优点,而另外两个选项也是缺点。
为了避免重复解释,我只用这一点的摘要来描述每个选项的共享的优缺点。有关共享pro或con的完整详细信息,请参见其他选项的独特部分中的反向con或pro的说明。对于两个选项的优点和其他两个选项的优点,我任意选择将完整的解释放在以“.
开头”开头的集合中。
对于较短的列表,隐含共享的优点和缺点而不是重复它们,请参阅此答案的this old version。
.
在第一行items.get.lazy.
take(10).
force
.
在第一行开头items.get.lazy
.take(10)
.force
.
或\
。#
注释掉续行,或者在行之间添加注释.
,缩进到上一个.
items.get.lazy
.take(10)
.force
.
或\
。.
对齐到列中
#
注释掉续行,或者在行之间添加注释\
在行尾,.
在下一行的开头items.get.lazy \
.take(10) \
.force
答案 3 :(得分:10)
我在行尾选择点的原因是它允许您在IRB会话中粘贴代码。此外,如果使用行开头的点,则无法在多行代码中间注释行。这是一个很好的讨论:https://github.com/bbatsov/ruby-style-guide/pull/176