使用 Factor 源代码树之外的代码

ram*_*ion 4 path factor-lang

我正在尝试开始使用因子。

到目前为止,我已经:

  • 下载了 OSX 磁盘映像
  • 将因子目录复制到 $INSTALL/factor
  • 通过运行启动调试器 $INSTALL/factor/factor

这似乎运行良好。

按照编写第一个因子程序的说明,我注意到scaffold-vocab在我的$INSTALL/factor/work目录中生成了文件。我现在可以使用它,但总的来说,我喜欢保留一个单独的$INSTALL目录树和$CODE目录树。

所以我试图按照“使用因子目录树之外的代码”文档中的说明将其他目录添加到用于将代码加载到factor可执行文件的路径中,但我运气不佳。

首先,我尝试设置一个FACTOR_ROOTS环境变量:

% export FACTOR_ROOTS=.:$CODE/Factor:$INSTALL/factor
% $INSTALL/factor/factor
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Run Code Online (Sandbox Code Playgroud)

然后,我尝试创建一个~/.factor-roots文件

% echo . > ~/.factor-roots
% echo $CODE/Factor >> ~/.factor-roots 
% echo $INSTALL/factor >> ~/.factor-roots
% $INSTALL/factor/factor        
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Run Code Online (Sandbox Code Playgroud)

然后我检查了它是否应该./.factor-roots改为:

% mv ~/.factor-roots .
% $INSTALL/factor/factor
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Run Code Online (Sandbox Code Playgroud)

最后,我尝试手动添加它:

% $INSTALL/factor/factor
( scratchpad ) "." add-vocab-root            
( scratchpad ) "$CODE/Factor" add-vocab-root ! no, I didn't actually use an environment variable here :)
( scratchpad ) "work" resource-path .
"/usr/local/src/factor/work"
( scratchpad ) ^D
Run Code Online (Sandbox Code Playgroud)

看来我在这里遗漏了一些基本的东西。

如何在$INSTALL/factor目录树之外编写代码并在因子中使用它?我怎么知道scaffold-vocab在我的$CODE/Factor目录中构建脚手架?

ram*_*ion 5

好的,感谢slava 和 erg 在 #concatenative 上的认真帮助,我能够弄清楚我做错了什么。

简而言之,resource-path这不是一种测试因子根的方法。就像文档说的那样,它“解析 [s] 相对于 Factor 源代码位置的路径。”

一个更有效的测试很简单vocab-roots get,它将获取当前的词根列表。

"/path/to/wherever" add-vocab-root将添加/path/to/wherever到您的词根列表中,并允许您这样做"/path/to/wherever" "project" scaffold-vocab,您可以在所需的位置构建脚手架。

正如尔格所说:

我通常会说另一个词,比如
: scaffold-games ( vocab -- ) [ "/home/erg/games" ] dip scaffold-vocab ; "minesweeper" scaffold-games