首先,我要声明我是一名"new"程序员 - 一名 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”为我提供了完整的文件名(它只是为了向我显示脚本正在运行),第二个 puts 返回“sitenum”。我希望能够访问此输出方法的“外部”。我在 libs/文件夹中有这个文件(名为 watcher.rb),在项目根目录中有第二个文件,名为“monitor.rb”,其中仅包含:
require './lib/watcher'
watcher = Watcher.new
watcher.start
我不知道如何从此文件访问我的“sitenum”、“numrecs”和“文件名”。我不确定它是否需要是变量、实例变量还是什么。我玩过 attr_accessible 和其他东西,但没有任何效果。我决定在这里问,因为我一直在忙着做一些事情,而且我自己的搜索开始让自己感到困惑。
预先感谢您提供的任何帮助或建议。
最佳答案
在 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 .
编辑:一些拼写错误。
关于ruby - 在 Ruby 中访问/处理变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10695168/