让我先说明我是一名“新手”的程序员 - 在完成各种教程后,一个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和其他东西,没有任何作用。我决定在这里问一下,因为我一直在转动轮子做几件事,而且我开始通过自己的搜索来迷惑自己。
提前感谢您提供任何帮助或建议。
答案 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