【问题标题】:Rebol Self ObjectRebol 自身对象
【发布时间】:2009-09-21 19:46:12
【问题描述】:

几周前我问了这个关于端口的问题 Rebol Smallest Http Server in the World: why first wait listen-port?

监听端口是一个对象

第一个监听端口是自我所以仍然不明白为什么自我不等于监听端口这就是我们需要的原因

http-port: first wait listen-port

如果wait返回listen-port且第一个listen端口与self或listen-port相同,则上述代码不一样

http-port: wait listen-port

?

【问题讨论】:

    标签: rebol


    【解决方案1】:

    listen-port 是一个端口!价值,而不是对象!价值。一个港口!可以看作是从对象的派生!数据类型并具有特殊用途。 FIRST 行为(与所有其他动作一样!值)是多态的。

    对象!值,它返回在该对象上下文中定义的单词列表(加上特殊的自引用单词'self):

    foo: make object! [bar: 3]
    first foo
    == [self bar]
    

    为了港口!值,FIRST 将根据端口有两种不同的行为!输入:

    • 客户端端口:它将 PICK 操作发送到端口内部处理程序(第一个端口 == 选择端口 1)。

    • 服务器端口:它将调用底层 C 套接字的 ACCEPT 操作以检索新的连接端口!值,允许与客户端通信。

    所以:

    wait listen-port
    

    当事件发生时返回监听端口值。

    http-port: first wait listen-port
    

    返回一个新端口!连接到由 'http-port 引用的客户端的值。

    【讨论】:

    • 它没有分配新的端口。接受的套接字使用与监听套接字相同的端口。
    • @EJP 你误解了port! value 在 Rebol 中的含义,它是一个高级抽象,不是 C 级套接字也不是端口号。在上面的代码中,http-portlisten-port 实际上是两个不同的端口!值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多