做某事的最佳实践是什么

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被写入了一次,如果是/ l_pet ,我将被写入N次。

#1楼 票数:1 已采纳

inspect语句允许检查表达式是否具有特定值,并且可以应用于整数类型的表达式(例如INTEGER_64CHARACTER_32NATURAL_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

#2楼 票数:1

在多分支指令中

inspect exp when ... then ... else ... end

exp表达式必须是字符或整数表达式。

在您给出的示例中,我看不到需要执行Object-Test ,但是如果您需要执行类似的操作,则需要使用条件指令。

if ... then ... elseif ... then ... else ... end

  ask by Pipo translate from so

未解决问题?本站智能推荐:

4回复

如何检查文件是否在埃菲尔铁塔中

这是检查Eiffel中文件是否存在的正确方法吗? 我想知道是否有一种方法不创建2个对象。 我将用以下语句完成检查: 定义路径`l_file_path:=“ /some/path/with_file.log” 检查父目录是否存在并有权写入 创建日志文件
2回复

埃菲尔铁塔:像前驱

也许我要走的很远,但是Eiffel真是太美了,我想可以like precursor Result类的功能like precursor说 我的意思是 会很好,它存在吗? 更新 :我在这里在埃菲尔铁塔上许愿
1回复

埃菲尔铁塔中的文件处理

给定一个文件input.txt ,它由数组中的许多元素和数组中的元素组成,我应该读取数据并将其复制到Eiffel中的数组中。 例如,对于 我应该得到len = 3 , a1 = {3,4,5} , a2 = {2,3,1} 。 我尝试了以下方法,但未成功 在这里,我有什么方法可以连
1回复

如何在埃菲尔铁塔中即时铸造

我在某些功能的功能范围内有以下代码: 在这里,参数类型为: 两者都声明为局部变量。 并且,这是功能添加的原型: 我得到的编译错误: 如何将可拆卸的泛型类型的“ tempA”和“ tempB”类型立即转换为泛型? 这样我就可以通过它们添加功能。 我没有更改原型,但是可以更
1回复

埃菲尔铁塔:创建程序的最佳做法

动物 猪 在我对最佳做法的看法中,我会说 如果没有进行创建过程的特殊意义(例如我的make_malformed示例),请重新定义default_create 所有创建过程都应调用default_create并添加特定行为(例如我的make_from_db示例) 那么,
1回复

埃菲尔铁塔:有没有办法在埃菲尔铁塔上表达双重隐含条款?

就像心理学中的双重约束一样,有没有办法告诉一个表达暗示另一种表达呢? 会像 可能相当于 T代表True布尔表达式 F代表错误 R代表结果 意味着(a,b:BOOLEAN):BOOLEAN 和(a,b:BOOLEAN):BOOLEAN 或(a,b:BOOLEA
1回复

埃菲尔铁塔:错误:类型基于未知的类

尝试在具有其余Web服务和JSON对象的EWF应用程序上实现一些测试用例时 ,我得到一个Error: type is based on unknown class. 添加我的第一个继承自EQA_TEST_SET类后 为简单的curl -v --header "Content-Type: a
1回复

埃菲尔铁塔:更改继承特征的签名

如何更改Eiffel中特征的签名(如果有)的正确方法? 如果没有我所理解的选项,那么如何在父类中定义将有一个功能可以选择但仍然不知道参数的数量和类型(类型可以通过多态解析。 。) 是唯一具有多态性的播放器,它具有将类A选为ANY类型的参数的方法吗? SELECTABLE类 类DB_