`initialize':用于CheckDir的未定义方法`dirpathname =':Class(NoMethod Error)

时间:2012-08-27 23:34:02

标签: ruby class-method

我是一个新的红宝石家伙,我试图制作一个小程序,但有些东西让我觉得无法找到解决方案。请建议我。我正在使用Ubuntu 12.04

会有3个文件。 main.rb,create.rb和check.rb

当我遇到这个问题时,我得到了这样的错误;

initialize': undefined method dirpathname ='for CheckDir:Class(NoMethodError)

[main.rb的]

#!/usr/bin/env ruby

BASE_DIR = File.join('','home','local','tester','code','www','test')
APP_ROOT = File.dirname(__FILE__)

$:.unshift(File.join(APP_ROOT, 'lib'))

require 'create'

THEME_DIR = ARGV[0]

if !THEME_DIR
  puts "Usage: ruby #{__FILE__} <the name of theme directory>\n\n"
  exit!
end

sym = CreateSymlink.new(THEME_DIR)
sym.launch!

[create.rb]

#!/usr/bin/env ruby
require 'check'

class CreateSymlink
  def initialize(path=nil)
    CheckDir.dirpathname = BASE_DIR + "/" + path
    if CheckDir.dir_exists?
      puts "The #{path} is already existed! Bye."
      exit!
    end
  end

  def launch!
    puts "yeah"
    #lets_start(path)
  end
end 

[check.rb]

#!/usr/bin/env ruby

class CheckDir
  @@dirpathname = nil
  def self.dirpathname(path=nil)
    @@dirpathname = File.join(BASE_DIR, path)
  end

  def self.dir_exists?
    if @@dirpathname && File.directory?(@@dirpathname)
      return true
    else
      return false
  end
end

提前致谢

1 个答案:

答案 0 :(得分:0)

正在寻找名为dirpathname=的方法(不存在)而不是dirpathname(确实存在)。

重命名方法(通过添加“=”)以使用“setter magic”或使用dirpathname(value)

调用方法

有助于重点阅读错误消息..

  

CheckDir的未定义方法 dirpathname = :Class(NoMethodError)

..请注意 = 是消息(“方法”)名称的一部分,请参阅this tutorial on Ruby syntax sugar

在Ruby语法中obj.method = valueobj.method=(value)的糖,而obj.__send__(#method=, value)的糖是{{1}}的糖。也就是说,消息“method =”被发送到“obj”,其中“value”作为第一个参数。