簡體   English   中英

測試輸入的數字是否不是文本-RUBY

[英]Test if the number input is not a text - RUBY

我試圖創建一個程序來測試插入的輸入是否為文本,數字或特殊字符。 所以我用!a.is_a? Integer !a.is_a? Integer 但是我的代碼似乎不起作用。 我收到此錯誤:

語法錯誤,意外的TCONSTANT。 然后期望關鍵字,

這是我的代碼:

print "Enter Number Please: "
a = gets.chomp.to_i

answer = case a

when 3
  "OUTPUT: a is 3"
when 4
 "OUTPUT: a is 4"
when !a.is_a? Integer
    "You did not enter a number."
else
  "OUTPUT: a is neither 3, nor 4"
end

puts answer

我知道嘗試使用Integer(obj)可能會更好,但是有沒有辦法做到這一點?

這里有幾件事要注意。 首先, to_i的結果始終是整數類型值。 測試!a.is_a? Integer !a.is_a? Integer是多余的,因為它永遠不會失敗。

您還需要記住, case語句本身使得與類進行比較非常容易:

case (a)
when Integer
  puts "I'm a number!"
when String
  puts "I'm a string!"
end

請注意,任何整數值都會自動觸發第一個條件。

即使when子句相當慷慨,您也可以對其進行限制。 為了使解析器正確解釋您的要求,您必須像這樣表達它:

when !a.is_a?(Integer)

盡管如前所述,這可以減少到when Integer所以其余的都是多余的。

您還希望避免在case部分中指定某些內容,然后再引用變量。 這會使任何閱讀您的代碼的人感到困惑,並且可能是不必要的。 如果您要處理復雜的邏輯,請使用一系列的if語句使事情變得清楚。

我認為您也可以使用三進制來做到這一點,就像這樣:

def integer?(number)
  number.is_a?(Integer) ? "This is a number" : "This is not a number"
end

暫無
暫無

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

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