2017-06-27 129 views
4

我分析我的朋友的代码,我看到这个小片段:

n,a=*$< 

我想不通这是什么意思 - 我搜索了很多网站,但他们似乎并不承认特殊字符。

+2

'$ <'是ARGF和''是图示。 – radubogdan

+0

ARGF是什么意思? – Ivy

+1

也请查看https://stackoverflow.com/a/3747135/846163并在irb中运行该代码段。代码采用STDIN的输入,并将前两行写入'n'和'a'。 – sschmeck

回答

4

$<是ARGF。从红宝石的标准文档:

ARGF是一个设计用于处理作为命令行参数给出的文件或通过STDIN传入的脚本的流。

一个超级好的解释here

*是图示操作。

您正在分配到an此时ARGF/STDIN内部有什么。

实施例:

[email protected] ~$ cat a.txt           
a 
b 
c 

[email protected] ~$ cat a.rb           
a, n = *$< 
puts "a is: #{a}" 
puts "n is: #{n}" 

[email protected] ~$ ruby a.rb a.txt         
a is: a 
n is: b 
+2

更具体地说,'*'调用'ARGF#to_a',它是['ARGF#readlines']的别名(http://ruby-doc.org/core-2.4.1/ARGF.html#method-i- readlines),所以'n,a = * $ <'相当于'n,a = ARGF.readlines' – Stefan

相关问题