Ruby再次打印相同的字符串时返回null

时间:2015-05-05 07:39:08

标签: ruby git

我正在修改gitlab的预接收挂钩

返回分支名称的代码是

print ARGF.read
print "\n"
refs = ARGF.read
print refs

第一次当我打印或放置时我得到了分支名称但是第二次每当我使用相同的字符串时它都不会返回任何内容。零或空字符串。

任何线索为什么会发生这种情况。我是红宝石的新手,所以无法弄明白。

2 个答案:

答案 0 :(得分:2)

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

手册指出ARGF::read

从ARGF读取_length_个字节。在命令行上命名的文件 通过这种方法连接并作为单个文件处理,所以当 在没有参数的情况下调用此伪文件的内容将返回 他们的全部。

您可能想要使用ARGF::readline

返回ARGF中当前文件的下一行。

或者ARGF::rewind

将当前文件定位到输入的开头,将ARGF.lineno重置为零。

答案 1 :(得分:2)

调用let nsa = NSArray(array: ["foo", "bar"]) if let a = nsa as? [String] { println("a \(a)") } 不是幂等的,也就是说你不能多次调用它并期望得到相同的结果,因为它会消耗"所有命令行参数都传递给你的钩子。

如果要重用命令行参数,必须先将它们存储在局部变量中,然后用它们执行所需的操作

ARGF.read