为什么不是“实例”这个词?
Why not an `instance?` word?
许多对象感知脚本语言都有一个运算符或函数来测试对象是否是给定元组或类型的实例。 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?
字样?我们有仿制药...
你的 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?
词更容易快速生成。
许多对象感知脚本语言都有一个运算符或函数来测试对象是否是给定元组或类型的实例。 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?
字样?我们有仿制药...
你的 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?
词更容易快速生成。