簡體   English   中英

Liberty / ISE Eiffel中的If陳述錯誤

[英]Error with If Statment in Liberty/ISE Eiffel

我對if陳述有疑問。

我有一個帶有命令行參數和utf8(€-Symbol)的程序。

錯誤在if語句中的works_not中。

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

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

在Eiffel中,字符串具有引用類型,因此等於運算符=將引用與字符串對象而不是其內容進行比較。 如果您想比較字符串值,則需要使用一個運算符~ ,在檢查兩個操作數的類型is_equal后,內部調用is_equal ,或者使用更健壯的same_string版本(前提是您的版本中可用)環境)。 總而言之,您可以嘗試以下方法之一,而不是使用等號:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM