几周前,我问了一个问题,如何输出哈希
多亏了很棒的社区,我得到了回应。
roster =
students.map do |s|
s.values.map do |f|
f.to_s.ljust(FIELD_SIZE) # 1 row
end.join(' ') # join columns with spaces
end.join($/) # join rows with OS-dependent CR/LF
Run Code Online (Sandbox Code Playgroud)
它适用于该项目,但是几周后,当我重新访问代码时,我意识到该变量中存在循环,并且具有end.join()。
这是什么意思end.join() ,又是什么roster?是绳子吗?数组?
谢谢!
由于我从字面上知道此代码,因此我有责任回答。
- 是什么
roster?是绳子吗?数组?
您基本上是在浪费时间在SO上发布此类问题。打开任何红宝石REPL,例如标准irb和类型:
irb|1 ? :foo.class
#? Symbol
irb|2 ? "foo".class
#? String
irb|3 ? roster.class
#? String
Run Code Online (Sandbox Code Playgroud)
这样一来,人们便可以立即得到答案“此变量是什么类型”。
- 这是什么意思
end.join()
这是方法链接。ruby中的方法可能需要零个参数,一些参数,还有一些参数和一个block。后者可以用大括号表示:
# ? ? HERE
[1, 2, 3].each { |e| puts e }
Run Code Online (Sandbox Code Playgroud)
或者do- end:
# ?? ??? HERE
[1, 2, 3].each do |e| puts e end
Run Code Online (Sandbox Code Playgroud)
这些表示法之间有一些细微的差异,但目前与主题无关。
到目前为止,方法可能会被束缚起来。从根本上讲,这意味着在前一种方法的结果上调用后一种方法:
# ? HERE
[1, 2, 3].map { |e| e ** e }.each { |e| puts e }
Run Code Online (Sandbox Code Playgroud)
这与以下内容完全相同:
intermediate_result = [1, 2, 3].map { |e| e ** e }
intermediate_result.each { |e| puts e }
Run Code Online (Sandbox Code Playgroud)
同样,方法可能在使用do- end表示法时被链接起来。
最后,ruby [几乎]在代码中的任何地方都允许有额外的空格,以提高代码的可读性:
# ? HERE
[1, 2, 3].map do |e| e ** e end.each do |e| puts e end
Run Code Online (Sandbox Code Playgroud)
要么
[1, 2, 3].map do |e|
e ** e
end.each do |e|
puts e
end
Run Code Online (Sandbox Code Playgroud)