2017-04-06 24 views
0

我與if statment一個問題。誤差/如果Statment在自由ISE艾菲爾

我有一個命令行,參數和UTF8程序(€ - 符號)。

的錯誤是在works_notif聲明。

class EURO 

insert ARGUMENTS 

create {ANY} 
    make 

feature {ANY} 

    make 
     do 
     works_not 
     works 
     end 

    works_not 
     local ok: BOOLEAN 
     do 
     print ("%N%NAnzahl Argumente   : " + argument_count.to_string + "%N") 
     print ("%NArgument -> Programmname : " + argument(0)) 
     print ("%NArgument -> Wert   : " + argument(1)) 
     print ("%NArgument -> Währung   : " + argument(2) + "%N") 

     ok := argument(2) = "€" 
     print ("%NArgument(2) ist Euro ? " + ok.to_string + "%N%N") 

     print ("don't work") 
     io.put_new_line 

     if argument(2) = "€" then 
      euro_in_dm(argument(1).to_real) 
     else 
      dm_in_euro(argument(1).to_real) 
     end 
     end 

    works 
     do 
     print ("works ") 
     io.put_new_line 

     if argument_count /= 2 then 
      print("%N%N Error (1) %N%N")  
     else 
      inspect 
       argument(2) 
      when "€" then 
       euro_in_dm(argument(1).to_real) 
      when "DM","dm" then 
       dm_in_euro(argument(1).to_real) 
      else 
       print("%N%N Error (2) %N%N") 
      end 
     end 
     end 

feature 

    euro_in_dm (a: REAL) 
     do 
     io.put_string("%N Euro -> DM ") 
     io.put_real(a * 1.95583) 
     io.put_string("%N%N") 
     end 

    dm_in_euro (a: REAL) 
     do 
     io.put_string("%N DM -> Euro ") 
     io.put_real(a/1.95583) 
     io.put_string("%N%N") 
     end 

end 

回答

1

問題出在比較運算符argument(2) = "€"

在艾菲爾串具有引用類型,所以等於運算符=比較引用到字符串對象,而不是它們的內容。如果你想字符串值而不是比較,你需要使用運營商~檢查類型的兩個操作數是完全一樣的,或者更強大的版本same_string(前提是在你的版本可用後,在內部調用is_equal環境)。總之,你可以試試下面的,而不是平等的一個:

  • argument(2).same_string ("€")
  • argument(2) ~ "€"
  • argument(2).is_equal ("€")