许多对象感知脚本语言都有一个运算符或函数来测试对象是否是给定元组或类型的实例。 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?
字词?我们有仿制药......
答案 0 :(得分: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?
字更容易制作。