Forth语言中`type`指令的作用?附Rosetta Code示例函数
关于
type指令的作用解析 通用type指令(以Unix/Linux Shell为例)
在Unix类系统的shell环境中,type指令的核心作用是显示指定命令的类型与具体定位,帮你快速搞清楚一个命令到底是shell内置命令、外部可执行文件、别名还是自定义函数。举几个实际场景的例子:
- 输入
type cd,会返回cd is a shell builtin,说明cd是shell自带的内置命令; - 输入
type ls,通常会返回ls is hashed (/usr/bin/ls),告诉你它是外部可执行文件,具体路径在/usr/bin/ls; - 如果你给
ls设置过别名(比如alias ls='ls -la'),输入type ls会返回ls is aliased tols -la``。
Forth代码中type的具体作用
再看你贴的这段Rosetta Code的Forth函数:
(echo) ( sock buf -- sock buf ) begin cr ." waiting..." 2dup 2dup size read-socket nip dup 0> while ." got: " 2dup type ( <-- HERE ) rot write-socket repeat drop drop drop ;
在Forth语言里,type是一个标准内置单词(Forth里的“单词”类似其他语言的函数/指令),它的作用是从数据栈上取出一组「地址+长度」的字符串描述,然后把对应字符串的内容输出到控制台。
具体拆解." got: " 2dup type这句的执行逻辑:
." got: "先在控制台打印固定字符串got:;2dup把栈上的buf对应的「地址+长度」两个值复制一份——因为后面还要用原buf执行write-socket操作,不能直接消耗掉;type读取这份复制出来的「地址+长度」,把对应内存区域的字符串内容打印到终端,也就是把从socket读取到的原始数据内容直观展示出来。
简单来说,这里的type就是用来把收到的socket数据内容输出到终端,让你能直接看到“到底收到了什么数据”。
内容的提问来源于stack exchange,提问作者Evan Carroll
相关产品推荐
相关产品推荐

