访问/处理Ruby中的变量

时间:2012-05-22 02:53:02

标签: ruby

让我先说明我是一名“新手”的程序员 - 在完成各种教程后,一个IT人员试图解决他的第一个“真正的”问题。

所以 - 这就是我想要做的。我正在观看.csv文件的目录 - 它将采用以下格式:999999_888_filename.csv

我想将“_”文件名的每个部分作为变量返回,以传递给另一个程序/脚本以执行其他任务。我出现了以下代码:

require 'rubygems'
require 'fssm'

class Watcher

def start
  monitor = FSSM::Monitor.new(:directories => true)
  monitor.path('/data/testing/uploads') do |path|
    path.update do |base, relative, ftype| 
      output(relative)
    end
    path.create do |base, relative, ftype| 
      output(relative)
    end
    path.delete { |base, relative, ftype| puts "DELETED #{relative} (#{ftype})" }   
  end
  monitor.run
end


def output(relative)
  puts "#{relative} added"
  values    = relative.split('_',)
  sitenum  = values[0]
  numrecs  = values[1]
  filename = values[2]
  puts sitenum
 end
end

我的第一个“puts”给了我完整的文件名(它只是告诉我脚本正在工作),第二个put返回'sitenum'。我希望能够访问此输出方法的“外部”。我在libs /文件夹中有这个文件(名为watcher.rb),我在项目根目录中有一个名为'monitor.rb'的第二个文件,它只包含:

require './lib/watcher'

watcher = Watcher.new
watcher.start

我无法弄清楚如何从这个文件中访问我的'sitenum','numrecs'和'filename'。我不确定它是否需要变量,实例变量或什么。我玩w / attr_accessible和其他东西,没有任何作用。我决定在这里问一下,因为我一直在转动轮子做几件事,而且我开始通过自己的搜索来迷惑自己。

提前感谢您提供任何帮助或建议。

2 个答案:

答案 0 :(得分:2)

Watcher课程的顶部,您将要定义三个attr_accessor声明,这些声明可以提供您想要的行为。 (attr_reader如果您只是阅读,attr_writer如果您只是在写,attr_accessor如果两者都是。)

class Watcher
    attr_accessor :sitenum, :numrecs, :filename

    ... 
    # later on, use @ for class variables
    ...
        @sitenum = 5
    ...
end

现在你应该对watcher.sitenum等没问题。这里an example

编辑:有些错别字。

答案 1 :(得分:2)

除了Jordan Scales的回答,这些变量应该初始化

class Watcher
  attr_accessor :sitenum, :numrecs, :filename

  def initialize
    @sitenum = 'default value'
    @numrecs = 'default value'
    @filename = 'default value'
  end

  ...
end

否则,您将获得无信息的价值nil