几周前,我问了一个如何输出哈希的问题
感谢社区的推崇,我得到了回应。
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
是什么意思?它是字符串吗?阵列
谢谢!
答案 0 :(得分:5)
由于我从字面上知道这个代码,我将负责回答。
- 什么是
醇>roster
?它是字符串吗?阵列?
你基本上是在浪费时间在SO上发布这类问题。打开任何红宝石REPL,例如标准irb
并输入:
irb|1 ▶ :foo.class
#⇒ Symbol
irb|2 ▶ "foo".class
#⇒ String
irb|3 ▶ roster.class
#⇒ String
这就是人们可以立即得到“这个变量是什么类型”这个问题的答案。
- 是什么意思 醇>
end.join()
这是方法链。 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