Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以干净的方式链接ruby枚举器函数_Ruby_Enumerator - Fatal编程技术网

以干净的方式链接ruby枚举器函数

以干净的方式链接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

我刚刚完成了一门关于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 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没问题。很乐意帮忙!