标签: rebol

同步读/写端口时避免递归?

Rebol 3中的所有端口操作都是异步的.我可以找到进行同步通信的唯一方法是调用wait.

但是在这种情况下调用wait的问题是它将检查所有开放端口的事件(即使它们不在传递给等待的端口块中).然后他们调用响应事件处理程序,但可以在其中一个事件处理程序中完成读/写操作.这可能导致递归调用"等待".

我该如何解决这个问题?

io asynchronous rebol rebol3

108
推荐指数
1
解决办法
3394
查看次数

如何在Rebol模块中绑定单词?

据我所知,该module!类型为受保护的命名空间提供了比object!'use函数更好的结构.如何在模块中绑定单词 - 我注意到与未绑定单词相关的一些错误:

REBOL [Type: 'module] set 'foo "Bar"
Run Code Online (Sandbox Code Playgroud)

另外,Rebol如何区分module('foo)的本地字和系统函数('set)的字?

稍后更新,不久之后:

我看到有一个改变绑定方法的开关:

REBOL [Type: 'module Options: [isolate]] set 'foo "Bar"
Run Code Online (Sandbox Code Playgroud)

这有什么不同的做法?默认情况下使用此方法有什么问题?

namespaces module rebol code-organization rebol3

19
推荐指数
1
解决办法
704
查看次数

在Rebol和Red中有关于定义范围的整体解释

REBOL /核心用户指南什么是红色,我了解到Rebol和Red都使用了定义范围.

从指南中,我知道它是静态作用域的一种形式,"变量的作用域在定义其上下文时确定",也称为运行时词法作用域,并且是依赖于上下文定义的动态形式的静态作用域..

我知道在com-sci中,有两种形式的范围:词法范围(静态范围)和动态范围.这个定义范围使我困惑.

那么什么是定义范围?

scope rebol red

17
推荐指数
2
解决办法
1801
查看次数

Rebol编辑器| IDE的其他选项?

我目前使用Remer语法方案的Programmer's Notepad.这还不错 - 任何富有洞察力的人都有另一个建议吗?

ide editor rebol

10
推荐指数
1
解决办法
1858
查看次数

Rebol 2和3之间绑定行为差异的总结是什么?

关于变量绑定的当前深入文档目标Rebol 2.有人可以提供Rebol 2和3之间差异的摘要吗?

binding bind rebol rebol3 rebol2

10
推荐指数
1
解决办法
701
查看次数

方言和解析的最佳介绍?

我是Rebol的新手,我正在与一个小型企业集团合作,评估它在某些领域的使用,这些领域一次又一次地证明了自己对变革和DSL等概念的高度抵制.

任何人都可以建议他们通过"解析"找到一个很好的介绍方式吗?我一直在阅读Rebol 3网站上的可用文档,以及Auverlot和Wood的程序员指南,这可能绰绰有余 - 但如果有人对其他相关材料或示例有建议,我会很感激的建议.

PS:我也是stackoverflow的新手,所以还没有神奇的20分聊天...

dsl parsing rebol rebol3

10
推荐指数
1
解决办法
420
查看次数

在Rebol或Red中搜索字符串

我有兴趣搜索很多长串,尝试在rebol中破解类似sed的实用程序作为学习练习.作为一个婴儿步骤,我决定寻找一个角色:

>> STR: "abcdefghijklmopqrz"

>> pos: index? find STR "z"
== 18

>> pos
== 18
Run Code Online (Sandbox Code Playgroud)

大!我们来寻找其他东西......

>> pos: index? find STR "n"
** Script Error: index? expected series argument of type: series port
** Where: halt-view
** Near: pos: index? find STR "n"

>> pos
== 18
Run Code Online (Sandbox Code Playgroud)

什么?:-(

是的,我正在搜索的字符串中没有"n".但是解释器爆炸而不是做一些明智的事情有什么好处,例如在pos中返回一个可测试的"null"字符?

我被告知我应该这样做:

>> if found? find STR "z" [pos: index? find STR "z"]
== 18

>> if found? find STR "n" [pos: index? find STR "n"]
== none

>> pos
== …
Run Code Online (Sandbox Code Playgroud)

string rebol rebol2 red

10
推荐指数
1
解决办法
440
查看次数

在Rebol中计算线路的最快/最有效的方法是什么?

给定一个字符串string,在其中计算行的最快/最有效的方法是什么?将接受任何风格的Rebol的最佳答案.我一直在假设parse [some [thru]]组合是遍历字符串的最快方式,但后来我不确定,因此转向SO:

count-lines: func [string [string!] /local count][
    parse/all string [
        (count: 1) some [thru newline (count: count + 1)]
    ]
    count
]
Run Code Online (Sandbox Code Playgroud)

要么:

count-lines: func [string [string!] /local count][
    count: 0
    until [
        count: count + 1
        not string: find/tail string newline
    ]
    count
]
Run Code Online (Sandbox Code Playgroud)

柜台怎么样?重复效率如何?

count-lines: func [string [string!]][
    repeat count length? string [
        unless string: find/tail string newline [
            break/return count
        ]
    ]
]
Run Code Online (Sandbox Code Playgroud)

更新:行计数采用文本编辑器原则:

空TextMate文档

空文档的行数仍为1.所以:

>> count-lines ""
== 1 …
Run Code Online (Sandbox Code Playgroud)

string performance newline rebol

9
推荐指数
1
解决办法
648
查看次数

Rebol中的'reword'功能是什么?我该如何使用它?

reword今天看到有人提到这个功能,但是它的文档非常简短.它看起来像shell脚本环境变量替换,或者可能是正则表达式替换,但不同.我如何使用此功能以及我将遇到什么样的陷阱?

templates template-engine rebol variable-expansion rebol3

9
推荐指数
1
解决办法
592
查看次数

不使用"copy"处理字符串时究竟发生了什么?

下面这个函数的目的是返回一个在两个星之间插入参数值的字符串.

star-name: func [name /local stars] [
    stars: "**"
    insert next stars name
    stars
]
print star-name "test" ;*test*
print star-name "this" ;*thistest*, but what I really want is *this*  
Run Code Online (Sandbox Code Playgroud)

第二次调用函数时,第一次调用的参数仍然是插入的.我知道答案是使用copy "**".我的问题是,每次调用函数时,它是否都不会重新分配stars变量"**"

rebol rebol3

9
推荐指数
1
解决办法
200
查看次数