0

MacRuby から RubyMotion に移植しているコードがいくつかあり、TCPServer Name エラーが発生します。エラー メッセージは次のとおりです。

app_delegate.rb:29:in `control_server:': uninitialized constant AppDelegate::TCPServer (NameError)

これは、問題の原因となるコード行です。

dts = TCPServer.new(ip, port)

Ruby の一部のクラスが RubyMotion に含まれていないことを読みましたが、どのクラスが利用できないのか、どのクラスが利用できないかを判断する方法がわかりません。

ありがとう

4

1 に答える 1

1

RubyMotion には、Ruby 標準ライブラリ全体が含まれていません。これは、Ruby 言語の特定の部分を処理する方法が組み込まれていないためです。これらの部分は、多くの標準ライブラリやコミュニティの gem ( 、 など) で必要とされrequireます。の上。evalload

RubyMotion は Objective-C クラスをシームレスにブリッジするため、伝統的に、代わりにObjective-Cライブラリを使用してこれに対処してきました。既存の Objective-C ライブラリは豊富にあり、CocoaPodsにはすばらしい依存関係管理システムがあります。少し書き直す必要がある場合は、CocoaAsyncSocketライブラリがニーズに合っているはずです。

もう少し冒険したい場合は、MotionBundlerを使用して既存のコードを機能させてみてください。requireRubyMotion にサポートを追加しようとしていますが、成功のレベルはさまざまです。理論的には、require 'socket'MotionBundler をセットアップした後、その行をコードに戻すだけで、残りは自動的に処理されます。自分で試してみると、かなり恐ろしいスタック トレースが得られたので、おそらく特効薬ではありません。 TCPServerMotionBundler ではサポートされていないネイティブの C 拡張機能を使用していると確信しているため、特に心配です。

于 2013-05-28T12:01:16.740 に答える