Ruby:end.join()是什么意思?

时间:2018-03-08 05:46:38

标签: ruby loops

几周前,我问了一个如何输出哈希的问题

  

Output hash in a table-like format

感谢社区的推崇,我得到了回应。

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

它适用于该项目,但几周后,当我重新访问代码时,我意识到变量中存在循环并且它有end.join()

end.join() 以及是什么意思roster是什么意思?它是字符串吗?阵列

谢谢!

2 个答案:

答案 0 :(得分:5)

由于我从字面上知道这个代码,我将负责回答。

  
      
  1. 什么是roster?它是字符串吗?阵列?
  2.   

你基本上是在浪费时间在SO上发布这类问题。打开任何红宝石REPL,例如标准irb并输入:

irb|1 ▶ :foo.class
#⇒ Symbol
irb|2 ▶ "foo".class
#⇒ String
irb|3 ▶ roster.class
#⇒ String

这就是人们可以立即得到“这个变量是什么类型”这个问题的答案。

  
      
  1. end.join()
  2. 是什么意思   

这是方法链。 ruby中的方法可能采用零参数,一些参数以及一些参数和一个块。后者可能用大括号表示:

#              ⇓            ⇓  HERE
[1, 2, 3].each { |e| puts e }

do - end

#              ⇓⇓            ⇓⇓⇓  HERE
[1, 2, 3].each do |e| puts e end

这些符号之间存在一些细微差别,但目前与主题无关。

到目前为止,方法可能会被束缚。这基本上意味着后一种方法被调用前一个的结果

#                           ⇓  HERE
[1, 2, 3].map { |e| e ** e }.each { |e| puts e }

这与:

完全相同
intermediate_result = [1, 2, 3].map { |e| e ** e }
intermediate_result.each { |e| puts e }

同样,在使用do - end表示法时,方法可能会被链接。

最后,ruby允许[几乎]在代码中的任何位置增加空间以提高代码可读性:

#                              ⇓  HERE
[1, 2, 3].map do |e| e ** e end.each do |e| puts e end

[1, 2, 3].map do |e|
  e ** e
end.each do |e|
  puts e
end

答案 1 :(得分:0)

在ruby中,链接方​​法是一种非常常见的做法,因此它只是在该块的结果上调用use warnings; use strict; my $regex = '([aeiou])([aeiou])'; my $subst = '$2.$1'; my $str = 'xeOyAuz'; $str =~ s/$regex/$subst/eeig; print "<$str>\n"; # prints "<xOeyuAz>" 方法,

join返回一个数组,students.map用于使用指定的参数将这些数组元素组合在一起,它可以是逗号,任何字符或新行join