Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[Ruby]:将类实例成员值传递给另一个类函数_Ruby - Fatal编程技术网

[Ruby]:将类实例成员值传递给另一个类函数

[Ruby]:将类实例成员值传递给另一个类函数,ruby,Ruby,我正在写一个程序来读取文件和搜索其中的文本。我已经写了最初的步骤。在下面给出的代码中,您可以看到一个符号**--**。在这里,我要传递类[CurrentFile]的成员变量值 还请建议我可以在这段代码中做些什么改进 class CurrentFile attr_accessor :currentFileName, :currentFileContent end class OpenFile < CurrentFile def OpenFileToRead() #Op

我正在写一个程序来读取文件和搜索其中的文本。我已经写了最初的步骤。在下面给出的代码中,您可以看到一个符号**--**。在这里,我要传递类[CurrentFile]的成员变量值

还请建议我可以在这段代码中做些什么改进

class CurrentFile
    attr_accessor :currentFileName, :currentFileContent
  end

class OpenFile < CurrentFile
    def OpenFileToRead()  #Open file as read-only.
      thisFile = File.open(** ----- **, 'r')
      counter = 1

        begin
          file = File.new(thisFile, "r")
          while (line = file.gets)
            puts "#{counter}: #{line}"
            counter = counter + 1
          end
          file.close
        rescue => err
          puts "Exception: #{err}"
          err
        end #End of Begin block
    end #End of OpenFileToRead
  end #End of Class: OpenFile

fileToRead = CurrentFile.new #Create instance of CurrentFile Class
fileToRead.currentFileName = "C:\WorkSpace\SearchText\abc.php" #Set file name to read
myFile = OpenFile.new #Create instance of OpenFile Class
class当前文件
属性访问器:currentFileName,:currentFileContent
结束
类OpenFile错误
放置“异常:#{err}”
犯错误
结束#开始块的结束
结束#OpenFileToRead的结束
结束#课程结束:OpenFile
fileToRead=CurrentFile.new#创建CurrentFile类的实例
fileToRead.currentFileName=“C:\WorkSpace\SearchText\abc.php”#将文件名设置为读取
myFile=OpenFile.new#创建OpenFile类的实例

如果您试图访问实例的
currentFileName
属性,我想您只需要编写
currentFileName

您不需要两个类

因为OpenFile继承了CurrentFile,所以在OpenFile中有currentFileName和currentFileContent属性。这意味着您可以在
文件中使用
currentFileName
。打开

fileToRead = OpenFile.new #Create instance of CurrentFile Class
fileToRead.currentFileName = "C:\WorkSpace\SearchText\abc.php" #Set file name to read
fileToRead.OpenFileToRead
或者,如果您想要两个类,而不是将currentFile实例作为参数传递给OpenFile,并且不继承:

class OpenFile
    def initialize(file)
      @file = file
    end

    def OpenFileToRead()  #Open file as read-only.
      thisFile = File.open(@file.currentFileName, 'r')
      counter = 1

        begin
          file = File.new(thisFile, "r")
          while (line = file.gets)
            puts "#{counter}: #{line}"
            counter = counter + 1
          end
          file.close
        rescue => err
          puts "Exception: #{err}"
          err
        end
    end
  end

fileToRead = CurrentFile.new #Create instance of CurrentFile Class
fileToRead.currentFileName = "C:\WorkSpace\SearchText\abc.php" #Set file name to read
myFile = OpenFile.new(fileToRead) #Create instance of OpenFile Class
myFile.OpenFileToRead

@Chuck:它给出了错误----[SearchText.rb:13:in
OpenFileToRead]:SearchText中CurrentFile:Class(NoMethodError)的未定义方法
currentFileName]。rb:33>退出代码:1]没有理由这样做。而且,事实上,如果你只是简单地将你在问题中发布的代码复制粘贴到一个文件中并运行它,它的工作方式正是你想要的。(显然,你必须先应用查克的建议。)@Chuck,@Jorg:这是一个错误。但是如何在本文中再次发布代码片段?@Rohit:您可以使用问题底部的“编辑”按钮来更新它。不确定您遇到了什么问题,但仅供参考,Ruby中的构造函数是用“def initialize”定义的,而不是“def”这是您的实际代码吗?您在我的答案评论中说的错误不应该出现在这段代码中。@Chuck:我同意。除了这是一段可怕的代码之外,当您复制并粘贴到一个文件中并运行它时,它也可以正常工作。