ruby - 在 Ruby 中访问/处理变量

标签 ruby

首先,我要声明我是一名"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/

相关文章:

ruby-on-rails - 默认更新 nested_attributes

javascript - 根据 Rails 中的第一个选择列表值更改第二个选择列表

ruby-on-rails - 如何计算多对多模型的特征向量?

mysql - 从 XML stackexchange 转储中提取问答对

ruby-on-rails - crontab 文件错误,无法安装

ruby - 使用 Natto gem (Mecab) 将日文汉字转换为注音假名

ruby-on-rails - 如何使下拉菜单中的每个选项成为与 simple_form 调用关联的链接?

ruby-on-rails - 如何渲染部分表单的验证错误 - Rails

ruby - 字符串中的十六进制字符

ruby-on-rails - 从 ActiveRecord 对象继承