나는 "Ruby를 힘든 방법으로 배우기"를 할 것이고, 연습 20에서는 이해할 수없는 코드 스 니펫이 있습니다. get.chomp가 "print_a_line"함수에서 f를 호출하는 이유를 모르겠습니다.루비의 함수 안에 gets.chomp
input_file = ARGV.first
def print_all(f)
puts f.read
end
def rewind(f)
f.seek(0)
end
def print_a_line(line_count, f)
puts "#{line_count}, #{f.gets.chomp}"
end
current_file = open(input_file)
puts "First let's print the whole file:\n"
print_all(current_file)
puts "Now let's rewind, kind of like a tape."
rewind(current_file)
puts "Let's print three lines:"
current_line = 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
current_line = current_line + 1
print_a_line(current_line, current_file)
결과적으로 출력의 두 번째 부분이 어떻게 생성되는지 이해할 수 없습니다. 코드로 전달 된 test.txt 파일의 처음 3 줄을 이해하지만 f.gets.chomp가 어떻게 생성하는지 이해할 수 없습니다. 당신이 IO#gets
에 대한 documentation을 살펴 경우
$ ruby ex20.rb test.txt
First let's print the whole file:
This is line 1
This is line 2
This is line 3
Now let's rewind, kind of like a tape.
Let's print three lines:
1, This is line 1
2, This is line 2
3, This is line 3
'f'는 입력 파일 객체이므로'f.gets' ([IO # gets] (http://www.ruby-doc.org/core-2.1.1/IO.html#method-i) -gets))는 개행 문자 ('\ n')를 만나기 전까지 파일에서 읽는다. ([Kernel # gets] (http://www.ruby-doc.org/core-2.1.5/Kernel.html # method-i-gets)는 사용자가 돌아 오기 전까지 STDIN에서 읽습니다. 줄 바꿈 문자는 읽지 만 더 이상은 읽지 않습니다. 'chomp'는 줄 바꿈 문자를 꺾습니다. –
원래 게시물에서 불분명했을 수도 있습니다. f.gets.chomp가 스크립트에 전달 된 test.txt 파일의 행을 통해 어떻게 증가하는지 명확하지 않습니다. 나는 current_line이 어떻게 증가 하는지를 이해하지만 current_file이 증가되어서 각 라인이 읽혀지는 것을 이해하지 못한다. 어떻게 든 gets.chomp와 관련이 있다고 생각했는데 상관 관계가 있는지 확실하지 않습니다. –