2012-04-07 25 views
2

有沒有類似的peek(); (從C++)函數在紅寶石?任何替代做到這一點?類似的函數peek(); (來自C++)在Ruby中

我找到了一種方法來做到這一點。

使用StringScanner:

require 'strscan' 
scanner = StringScanner.new(YourStringHere) 
puts scanner.peek(1) 

可以使用StringScanner掃描文件以及:

file = File.open('hello.txt', 'rb') 
scanner = StringScanner.new(file.read) 
+1

對於那些不熟悉C++的人,'peek'返回下一個字符而不消耗輸入。 – Pubby 2012-04-07 03:17:48

回答

1

也許你可以使用ungetc。嘗試看看here

它不相等,但您可以獲得相同的結果。

+0

所以我使用'getc'然後'ungetc',對吧? – 2012-04-07 03:52:56

+0

是的,你可以做到這一點。 (如果它符合你的需求,請記住接受答案:P) – dash1e 2012-04-07 03:54:36

1

Enumerator#peek讓我們來看看枚舉器的下一個值。 IO#bytesIO#chars將分別給你一個字節流或字符流的枚舉器。既然你打開「rb」,我會假設你想要字節。

file = File.open('hello.txt', 'rb') # assume contains text "hello\n" 
fstream = file.bytes 

fstream.next # => "h" 
fstream.peek # => "e" 
fstream.next # => "e" 
... 

當然,現在你有點卡在字符流的時間處理。