2012-08-27 46 views
-1

我是一個新的紅寶石的傢伙,我試圖做一個小程序,但有什麼是竊聽我,我找不到解決方案。請建議我。我正在使用Ubuntu 12.04`初始化':未定義的方法`dirpathname ='爲CheckDir:類(NoMethod錯誤)

會有3個文件。 main.rb,create.rb和check.rb

當我運行這個問題時,我得到了這樣的錯誤;

initialize': undefined method dirpathname =」爲CheckDir:類(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

它正在尋找稱爲dirpathname=(它不存在)而不是dirpathname(它確實存在)的方法。

要麼重命名方法(通過添加「=」)來使用的「setter魔術」或調用該方法,因爲它與dirpathname(value)


它有助於讀強調錯誤消息..

未定義的方法dirpathname =爲CheckDir:類(NoMethodError)

..注意,=部分消息(「方法」)名稱,請參閱this tutorial on Ruby syntax sugar

在Ruby語法中obj.method = value是糖爲obj.method=(value),而糖爲obj.__send__(#method=, value)。也就是說,將「method =」消息作爲第一個參數以「value」發送到「obj」。

+0

感謝您的迴應,但我不確定你的意思,因爲我的代碼中沒有這樣的'dirpathname =',所以我不明白錯誤消息 – user1628920

+0

增加了重點和鏈接。 – 2012-08-27 23:58:43

+0

啊,是的,我只注意到self.dirpathname(path = nil)有問題。它應該像self.dirpathname =(path = nil)。非常感謝 – user1628920

相關問題