调用setter函数ruby(见fname =(fname)后的注释

时间:2015-12-29 07:42:22

标签: ruby

#Creating a class that will count words in any object file
class File_handling
  attr_reader :fname

  def initialize(fname)
    #@fname = fname
    if File.exist? fname
      @fname = fname
    else
      fname=(fname)#why this doesnt work to call the function below
    end
  end

  def fname=(finame)
    if File.exist? finame
      @fname = finame
    else
      p "Enter a good file name >>> "
      filename = gets.chomp
      @fname=(filename)
    end
  end

  def printfile()
    File.foreach(@fname) do |line|
      puts line.chomp
    end
  end
end

f1 = File_handling.new('text.txt')
f1.printfile()

def printfiles(fname)
  File.foreach(fname) do |line|
    puts line
  end
end

p printfiles('test.txt')

我是Ruby的新手,并尝试了解一些事情。我没有真正完成课程,但我想知道为什么调用上面的fname =函数不起作用无论我输入什么文件名,我都不会收到else消息

1 个答案:

答案 0 :(得分:0)

因为解释器会认为您想将局部变量fname的值赋给局部变量fname。为了使其有效,你必须更明确:

self.fname = fname