如何将对象的类型与给定类型(Java中的instanceOf语句)进行比较?
do_stuff (a_type: TYPE)
local
an_object: ANY
do
an_object := get_from_sky
if an_object.instanceOf (a_type) then
io.putstring("Object is same type as parameter")
else
io.putstring("Object is NOT same type as parameter")
end
end
答案 0 :(得分:1)
根据解决方案的一般性,有不同的选择。首先,考虑始终附加an_object
的情况:
a_type
始终表示引用类型。
对于引用类型,可以使用类attempted
的功能/
(具有别名TYPE
)。
if attached (a_type / an_object) then
-- Conforms.
else
-- Does not conform.
end
a_type
可以表示引用类型或扩展类型。
在这种情况下,类attempted
的功能TYPE
不可用,因为它始终会为扩展类型返回附加的对象。因此,应直接比较类型。
if an_object.generating_type.conforms_to
(({REFLECTOR}.type_of_type ({REFLECTOR}.detachable_type (a_type.type_id))))
then
-- Conforms.
else
-- Does not conform.
end
如果an_object
也可以是Void
,则该条件应进行其他空缺测试。从上述C
的情况来看,处理可拆卸an_object
的测试将是:
if
-- If an_object is attached.
attached an_object and then C or else
-- If an_object is Void.
not attached an_object and then not a_type.is_attached
then
-- Conforms.
else
-- Does not conform.
end
答案 1 :(得分:-1)
如果您要检查a_type
的类型是否与an_object
的类型相同,
使用功能{ANY}.same_type
,如果要检查类型一致性,只需使用{ANY}.conforms_to
do_stuff (a_type: TYPE)
local
an_object: ANY
do
an_object := get_from_sky
if an_object.same_type (a_type) then
io.putstring("Object an_object is same type as argment a_type")
elseif an_object.conforms_to (a_type)
io.putstring("Object an_object conforms to type of a_type ")
else
io.putstring ("...")
end
end