1

许多对象感知脚本语言都有一个运算符或函数来测试对象是否是给定元组或类型的实例化。JavaScript 有instanceof操作符,Python 有isinstance内置函数和issubclass内置函数,等等。

但在 Factor 中,所有元组类和对象类型都有自己的instance?词:

TUPLE: car speed ;
! autogenerated is the word car?, which tests if something is a car
TUPLE: boat weight ; 
! autogenerated is the word boat?, which tests if something is a boat
100 boat boa boat? ! -> t
100 boat boa car?  ! -> f

船就是船,车就是车。汽车不是船。

我们可以改写最后两行,如:

100 boat boa boat instance-of? ! -> t
100 boat boa car  instance-of? ! -> f

相反,Factor 中的每个对象都有自己的专用instance?词。这只是为了简洁和可读性,还是有实现原因?

出于某种原因,是否想instance?在某些对象上自定义单词?我们有通用的...

4

1 回答 1

1

instance-of?会在大部分时间工作:

: instance-of? ( obj cls -- ? ) [ class-of ] dip class<= ;
123 boat boa boat instance-of? .
t
123 boat boa tuple instance-of? .
t
123 fixnum instance-of? . 
t

但对于更复杂的类型来说还不够好:

QUALIFIED: math.primes 
PREDICATE: even < integer 2 mod 0 = ;    
PREDICATE: prime < integer math.primes:prime? ;
7 prime? .
t
6 even?
t
7 prime instance-of?
f
6 even instance-of? .
f

另一个原因是优化。fixnum?在性能敏感代码中使用的,string?和之类的词array?比更通用的词更容易快速编写instance-of?

于 2016-06-10T00:24:39.067 回答