Rebol 3中的所有端口操作都是异步的.我可以找到进行同步通信的唯一方法是调用wait.
但是在这种情况下调用wait的问题是它将检查所有开放端口的事件(即使它们不在传递给等待的端口块中).然后他们调用响应事件处理程序,但可以在其中一个事件处理程序中完成读/写操作.这可能导致递归调用"等待".
我该如何解决这个问题?
据我所知,该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)
这有什么不同的做法?默认情况下使用此方法有什么问题?
从REBOL /核心用户指南和什么是红色,我了解到Rebol和Red都使用了定义范围.
从指南中,我知道它是静态作用域的一种形式,"变量的作用域在定义其上下文时确定",也称为运行时词法作用域,并且是依赖于上下文定义的动态形式的静态作用域..
我知道在com-sci中,有两种形式的范围:词法范围(静态范围)和动态范围.这个定义范围使我困惑.
那么什么是定义范围?
我目前使用Remer语法方案的Programmer's Notepad.这还不错 - 任何富有洞察力的人都有另一个建议吗?
我是Rebol的新手,我正在与一个小型企业集团合作,评估它在某些领域的使用,这些领域一次又一次地证明了自己对变革和DSL等概念的高度抵制.
任何人都可以建议他们通过"解析"找到一个很好的介绍方式吗?我一直在阅读Rebol 3网站上的可用文档,以及Auverlot和Wood的程序员指南,这可能绰绰有余 - 但如果有人对其他相关材料或示例有建议,我会很感激的建议.
PS:我也是stackoverflow的新手,所以还没有神奇的20分聊天...
我有兴趣搜索很多长串,尝试在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的最佳答案.我一直在假设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)
更新:行计数采用文本编辑器原则:

空文档的行数仍为1.所以:
>> count-lines ""
== 1 …Run Code Online (Sandbox Code Playgroud) 我reword今天看到有人提到这个功能,但是它的文档非常简短.它看起来像shell脚本环境变量替换,或者可能是正则表达式替换,但不同.我如何使用此功能以及我将遇到什么样的陷阱?
下面这个函数的目的是返回一个在两个星之间插入参数值的字符串.
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变量"**"?