Ruby 中的 *$< 是什么意思?

4
我正在分析我的朋友的代码,看到了这段小代码:

n,a=*$<

我无法理解这是什么意思 - 我在许多网站上搜索,但它们似乎无法识别特殊字符。


2
$< 是 ARGF,而 * 则是 splat。 - radubogdan
ARGF是什么意思? - richzli
1
请查看 https://dev59.com/I2865IYBdhLWcg3wkfgW#3747135 并在 irb 中运行代码片段。该代码从 STDIN 获取输入,并将前两行输入分别存储到 na 变量中。 - sschmeck
谢谢,我会去查看的。 - richzli
1个回答

4

$<是ARGF。根据Ruby的标准文档:

ARGF是为在脚本中处理作为命令行参数给出或通过STDIN传递的文件而设计的流。

这里有一个超好的解释(链接)

*是展开操作符。

你正在将ARGF/STDIN中此时的内容分配给an

示例:

raducroitoru@dotix ~$ cat a.txt                                         
a
b
c

raducroitoru@dotix ~$ cat a.rb                                          
a, n = *$<
puts "a is: #{a}"
puts "n is: #{n}"

raducroitoru@dotix ~$ ruby a.rb a.txt                                   
a is: a
n is: b

2
更具体地说,*调用的是ARGF#to_a,它是ARGF#readlines的别名,因此n, a = *$<等同于n, a = ARGF.readlines - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接