3

私は当惑する問題を抱えています。ある Ruby スクリプトから別の Ruby スクリプトを呼び出したい。

これを念頭に置いて、testscript.rbを作成して実行すると、このコードが含まれています。

 require './paypal.rb'
 puts paypal['L_AMT0']

このコードは、私のペイパルの残高である数字を返します。これは、ruby-paypal gem を使用する paypal.rb ファイルに依存しています。ruby testscript.rb を実行すると、paypal の残高が出力されます。これは、正常に機能していることを意味します。上記のシナリオでは、testscript.rb が paypal.rb から返される変数を取得しているため、これは、ある RB を別の RB から呼び出すための私の方法が問題ないことを示しています。

これと同じロジックを使用して、上記のコードを SiriProxy と呼ばれる別のプログラムに挿入しました。ルビプログラムです。Paypal の残高を取得するために必要です。

そのプログラム内で、require paypal.rbを実行しましたが、見つからないために失敗したため、requireに絶対パスを設定して修正しました。

ただし、SiriProxy (私に問題を与えている他の ruby​​ rb) が puts paypal['L_AMT0'] を実行しようとすると、エラーが発生してプログラムが終了します。

これがエラーです。

[Info - Plugin Manager] Say: Checking Paypal Balance
/home/siriproxy/.rvm/gems/ruby-1.9.3-p194@SiriProxy/gems/siriproxy-0.3.0/plugins/siriproxy-example/lib/siriproxy-example.rb:47:in `block in <class:Example>': undefined local variable or method `paypal' for #<SiriProxy::Plugin::Example:0x931a228> (NameError)
    from /home/siriproxy/.rvm/gems/ruby-1.9.3-p194@SiriProxy/bundler/gems/cora-1edcfb9073d5/lib/cora/plugin.rb:47:in `instance_exec'
    from /home/siriproxy/.rvm/gems/ruby-1.9.3-p194@SiriProxy/bundler/gems/cora-1edcfb9073d5/lib/cora/plugin.rb:47:in `block (2 levels) in process'

上記の出力では、次のように「paypal」を理解できないことが問題のようです。

未定義のローカル変数またはメソッド「paypal」

ただし、 testscript.rb でまったく同じことを行い、機能するため、その理由はわかりません。

誰でも助けることができますか?ありがとうございました。

4

2 に答える 2

0

@CodeGnome が正しいようです。

カーネルのドキュメントから:

require(name) → true または false

指定された名前を読み込み、成功した場合は true を返し、機能が既に読み込まれている場合は false を返します。

require_relative(string) → true または false

Ruby は、必要なファイルのパスに関連する string という名前のライブラリをロードしようとします。ファイルのパスを特定できない場合、LoadError が発生します。ファイルがロードされている場合は true が返され、それ以外の場合は false が返されます。

于 2012-06-25T03:29:59.143 に答える
0

現在のディレクトリからファイルをロードする

ライブラリやその内部については何も知りませんが、require ステートメントが間違っている可能性があります。Ruby 1.9.3 で現在のディレクトリからファイルをロードする場合は、次を使用する必要があります。

require_relative 'paypal'

バンドラーとジェム

バンドルの一部としてインストールした gem の場合 (例: gem が Gemfile で定義されている)、require ステートメントでパスを指定するのは間違っています。代わりに、次のようにバンドルされた gem を要求する必要があります。

require 'bundler/setup'
require 'paypal'
于 2012-06-25T02:41:19.853 に答える