【问题标题】:TCPServer Class NameError in RubyMotion (OSX)RubyMotion (OSX) 中的 TCPServer 类名称错误
【发布时间】:2013-05-26 22:20:55
【问题描述】:

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

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

这是导致问题的代码行:

dts = TCPServer.new(ip, port)

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

谢谢

【问题讨论】:

    标签: macos rubymotion


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢艾特。我会尝试一下运动捆绑器,但可能会开始研究 Cocoa 套接字。
    • 我试过motionbundler,它不像你想象的那样喜欢socket库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多