以干净的方式链接ruby枚举器函数
我刚刚完成了一门关于ruby的课程,在这门课程中,讲师将电影列表进行分组,然后调用map、sort和reverse。它工作得很好,但我觉得语法不是很可读,我正在试图弄清楚我想的是否有效。我是c#出身以干净的方式链接ruby枚举器函数,ruby,enumerator,Ruby,Enumerator,我刚刚完成了一门关于ruby的课程,在这门课程中,讲师将电影列表进行分组,然后调用map、sort和reverse。它工作得很好,但我觉得语法不是很可读,我正在试图弄清楚我想的是否有效。我是c#出身 #we can reformat our code to make it shorter #note that a lot of people don't like calling functions on the #end of function blocks. (I don't like the
#we can reformat our code to make it shorter
#note that a lot of people don't like calling functions on the
#end of function blocks. (I don't like the look, either)
count_by_month = movies.group_by do |movie|
movie.release_date.strftime("%B")
end.map do |month, list|
[month, list.size]
end.sort_by(&:last).reverse
我想知道的是,我是否可以做类似的事情
#my question: can I do this?
count_by_month = movies.group_by(&:release_date.strftime("%B"))
.map(&:first, &:last.size)
.sort_by(&:last)
.reverse
#based on what I've seen online, I could maybe do something like
count_by_month = movies.groupBy({m -> m.release_date.strftime("%B")})
.map{|month, list| [month, list.size]}
.sort_by(&:last)
.reverse
正如许多评论中的人所说,这确实是一个风格问题;也就是说,我必须同意代码中的注释,并说您希望避免在do..end结尾处的方法链接 如果要按行拆分方法,请使用do..end
{}
和do…end是同义词,正如您所知,但大括号(以我的经验)更常用于单行代码,正如“mu太短”所指出的,如果您打算使用它们,您可能需要研究lambdas。但我会坚持…在这种情况下结束
我被教导要遵循的一个一般的风格规则是,如果课堂上正在进行的工作以一种可能不直观的方式发生变化,那么就要将链条分开。例如:fizz=“buzz”.split.reverse
将字符串拆分为数组,但代码的作用很清楚
在你提供的例子中,有很多事情很难理解;我喜欢您在上一个示例中使用散列表示法写出group_,因为很清楚group_所依据的排序以及输出是什么-我将它放在它自己的一个[命名良好的]变量中
grouped_by_month = movies.groupBy({m -> m.release_date.strftime("%B")})
count_by_month = grouped_by_month.map{|month, list| [month, list.size]}.sort_by(&:last).reverse
这将代码拆分为一行,用于设置分组哈希,另一行用于处理分组哈希
同样,这是一种风格,所以每个人都有自己的怪癖;这就是我在快速浏览的基础上编辑的方法。总的来说,你似乎对Ruby很感兴趣!有时我只是喜欢一行中方法链的外观,即使这与最佳实践背道而驰(我正在做ProjectEuler或其他我自己的项目)。我建议查看Github上的大型项目(例如:rails),以了解那些比我更有经验的人是如何编写干净的代码的。祝你好运 这确实是一种风格,但在大多数情况下,单行使用
{}
块语法,多行使用do
end
-这里有一个风格指南,有些用法:。这当然是codereview的一个问题,虽然不是SONo,但是你不能在代码审查上。如果你的逻辑块不是一行,那么你可以使用lambdas:release\u date=lambda{movie};电影。按(&release\u date)分组。映射(…)
。您的问题是什么?不要将您想要与我们交流的内容作为注释写在代码中。把它们写成短信。非常感谢!这非常有帮助,我感谢你的洞察力!:D没问题。很乐意帮忙!