0

私は新しい Ruby の男で、小さなプログラムを作成しようとしましたが、解決策が見つからないという問題があります。教えてください。Ubuntu 12.04 を使用しています

3つのファイルがあります。main.rb、create.rb、check.rb

この問題を実行すると、次のようなエラーが発生しました。

initialize': undefined methodCheckDir:Class の dirpathname=' (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

前もって感謝します

4

1 に答える 1

0

dirpathname=(存在する)の代わりに(存在しない)呼び出されたメソッドを探してdirpathnameいます。

メソッドの名前を変更して(「=」を追加して)「セッターマジック」を使用するか、そのままメソッドを呼び出しますdirpathname(value)


エラーメッセージを強調して読むと役立ちます..

CheckDir:Class の未定義メソッドdirpathname= (NoMethodError)

.. = メッセージ (「メソッド」) 名の一部であることに注意してください。Ruby 構文 sugar に関するこのチュートリアルを参照してください。

Ruby の構文obj.method = valueでは、砂糖は砂糖でobj.method=(value)あり、砂糖はobj.__send__(#method=, value). つまり、メッセージ「method=」が「value」を最初の引数として「obj」に送信されます。

于 2012-08-27T23:39:47.157 に答える