我是一个新的红宝石家伙,我试图制作一个小程序,但有些东西让我觉得无法找到解决方案。请建议我。我正在使用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
提前致谢
答案 0 :(得分:0)
正在寻找名为dirpathname=
的方法(不存在)而不是dirpathname
(确实存在)。
重命名方法(通过添加“=”)以使用“setter magic”或使用dirpathname(value)
有助于重点阅读错误消息..
CheckDir的未定义方法 dirpathname = :Class(NoMethodError)
..请注意 = 是消息(“方法”)名称的一部分,请参阅this tutorial on Ruby syntax sugar。
在Ruby语法中obj.method = value
是obj.method=(value)
的糖,而obj.__send__(#method=, value)
的糖是{{1}}的糖。也就是说,消息“method =”被发送到“obj”,其中“value”作为第一个参数。