Eiffel:带有attached和inspect的经典类型转换开关结构
Eiffel: classical typecasting switch structure with attached and inspect
执行诸如
之类的操作的最佳做法是什么
local
l_pet: ANIMAL
do
l_pet := catch_it_from_the_sky
inspect l_pet
when attached {DOG} l_pet as l_dog
l_dog.eat (meat)
when attached {FISH} l_pet as l_fish
l_fish.eat (plants)
else
io.put_string ("Strange animal how do I feed him???")
end
do
编译器在 attached
之后抱怨...
更新:为什么需要这样的东西?
因为我碰巧把重复的复制粘贴搞砸了,这是一种语言试图帮助避免的事情。在上面的例子中,l_pet
写了一次,写了 N 次 if/else 我不得不写和 ifs...
一样多的次数
inspect
语句允许检查表达式是否具有特定值,并且可以应用于整数类型的表达式(例如 INTEGER_64
、CHARACTER_32
或 NATURAL_8
):
inspect age
when 6 .. 16 then ...
when 18 then ...
when 80, 90 then ...
...
end
为了区分对象类型,使用了条件指令:
if attached {DOG} pet as dog then
dog.eat (meat)
elseif attached {FISH} pet as fish then
fish.eat (plants)
else
io.put_string ("Strange animal how do I feed him???")
end
在多分支指令中
inspect exp when ... then ... else ... end
exp
表达式需要是字符或整数表达式。
在你给出的示例中,我认为没有必要这样做 Object-Test,
但是如果你需要做类似的事情,你需要使用条件指令。
if ... then
...
elseif ... then
...
else
...
end
执行诸如
之类的操作的最佳做法是什么local
l_pet: ANIMAL
do
l_pet := catch_it_from_the_sky
inspect l_pet
when attached {DOG} l_pet as l_dog
l_dog.eat (meat)
when attached {FISH} l_pet as l_fish
l_fish.eat (plants)
else
io.put_string ("Strange animal how do I feed him???")
end
do
编译器在 attached
之后抱怨...
更新:为什么需要这样的东西?
因为我碰巧把重复的复制粘贴搞砸了,这是一种语言试图帮助避免的事情。在上面的例子中,l_pet
写了一次,写了 N 次 if/else 我不得不写和 ifs...
inspect
语句允许检查表达式是否具有特定值,并且可以应用于整数类型的表达式(例如 INTEGER_64
、CHARACTER_32
或 NATURAL_8
):
inspect age
when 6 .. 16 then ...
when 18 then ...
when 80, 90 then ...
...
end
为了区分对象类型,使用了条件指令:
if attached {DOG} pet as dog then
dog.eat (meat)
elseif attached {FISH} pet as fish then
fish.eat (plants)
else
io.put_string ("Strange animal how do I feed him???")
end
在多分支指令中
inspect exp when ... then ... else ... end
exp
表达式需要是字符或整数表达式。
在你给出的示例中,我认为没有必要这样做 Object-Test, 但是如果你需要做类似的事情,你需要使用条件指令。
if ... then
...
elseif ... then
...
else
...
end