0

我有一些代码要从 MacRuby 移植到 RubyMotion,但出现 TCPServer Name 错误:这是错误消息:

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

这是导致问题的代码行:

dts = TCPServer.new(ip, port)

我已经读到 RubyMotion 中不包含一些来自 Ruby 的类,但我不确定哪些类以及如何确定哪些类不可用。

谢谢

4

1 回答 1

1

RubyMotion 不包含整个 Ruby 标准库,因为 RubyMotion 没有内置方法来处理许多标准库和社区 gem 所需的 Ruby 语言的某些部分——例如require,eval等等load上。

传统上,我们通过使用Objective-C库来处理这个问题,因为 RubyMotion 无缝连接了 Objective-C 类。CocoaPods中有大量现有的 Objective-C 库和出色的依赖管理系统。如果您想进行一些重写,那么CocoaAsyncSocket库应该可以满足您的需求。

如果您感觉更有冒险精神,您可以尝试使用MotionBundler让您现有的代码正常工作。它尝试添加require对 RubyMotion 的支持,并取得了不同程度的成功。从理论上讲,您只需require 'socket'在设置 MotionBundler 后将该行放回代码中,其余的就应该由它来处理。不过,当我自己尝试时,我得到了一些看起来很吓人的堆栈跟踪,所以它可能不是灵丹妙药。 TCPServer尤其令人担忧,因为我相当确定它使用了 MotionBundler 不支持的本机 C 扩展。

于 2013-05-28T12:01:16.740 回答