0

在 Zed Shaw 的 Learn Ruby the Hard Way 中,练习 21:

def add(a, b)
  puts "ADDING #{a} + #{b}"
  a + b
end

age = add(30, 5)  
puts "Age: #{age}"

这打印年龄:35。

我尝试在上一个练习(ex20)中这样做:

def print_all(f)
    puts f.read()
end

current_file = File.open(input_file)

sausage = print_all(current_file)

puts "Sausage: #{sausage}"

但是当我运行它时,即使我将文件指针移回 0,#{sausage} 也不会打印:

def print_all(f)
    puts f.read()
end

def rewind(f)
  f.seek(0, IO::SEEK_SET)
end

current_file = File.open(input_file)

sausage = print_all(current_file)

rewind(current_file)

puts "Sausage: #{sausage}"

我将 add(a, b) 方法的返回值分配给年龄,为什么我不能对 print_all(current_file) 做同样的事情?

4

1 回答 1

1
def print_all(f)
    puts f.read()
end

的返回值print_all是 的返回值puts f.read(),是 的返回值puts,而不是 的返回值f.read()puts总是返回nil。因此,print_all总是返回nil

也许您打算:

def print_all(f)
    f.read()
end

或者,如果您需要在函数/方法中打印它:

def print_all(f)
    foo = f.read()
    puts foo
    foo
end
于 2013-10-11T12:35:13.480 回答