a = '12'
我想檢查這個對象是否有時間值。假設我做a.try(:to_time)
。這返回一個ArgumentError
。我可以檢查一個值是否爲接收true
或false
響應的時間值?如何檢查對象是否有時間值?
a = '12'
我想檢查這個對象是否有時間值。假設我做a.try(:to_time)
。這返回一個ArgumentError
。我可以檢查一個值是否爲接收true
或false
響應的時間值?如何檢查對象是否有時間值?
a = "12"
p a.is_a?(Time) #false
p a.class == String #true
p a.is_a?(Object) #true (a's class or superclass)
這是我真正想要的。謝謝! –
您可以使用respond_to?
來檢查對象是否響應該方法。
a.respond_to?(:to_time)
編輯
它提出ArgumentError
這是我之前錯過。 respond_to?
幫助NoMethodError
,但不是ArgumentError
。
你應該看看to_time
的定義,以便知道該方法有多少個參數和參數。
如果我做a.respond_to?(:to_time),它會返回true。 –
@MariusPop:真的嗎?當我做'a ='12'時; a.respond_to?(:to_time)'它返回'false'。 – Davidann
@Davidann它會更好,如果它會返回false,因爲如果我嘗試將其轉換爲時間,它會引發ArgumentError –
要解析的時候儘量使用Time.parse
:
irb(main):002:0> Time.parse('12:00')
=> 2012-10-04 12:00:00 -0700
irb(main):003:0> Time.parse('the time is 12:00')
=> 2012-10-04 12:00:00 -0700
irb(main):005:0> Time.parse('jan 1, 1970 11:11')
=> 1970-01-01 11:11:00 -0700
注意,這個失敗默默:
irb(main):004:0> Time.parse('12 noon')
=> 2012-10-12 00:00:00 -0700
它不會出現,有一個內置的方法來做到這一點。但是你總是可以重載String模型。喜歡的東西 -
class String
def to_time
begin
Time.parse(self)
rescue Exception => exception
return false
end
return true
end
end
我不認爲猴子修補像String這樣的常用類是一個好主意。這樣做可能會導致意想不到的結果。 – Davidann
你可能是對的,覆蓋現有的方法將是一個壞主意(畢竟,這個補丁會抹掉to_time函數,你絕對不會想這麼做)。所以你可以把它寫成一個叫做can_parse_to_time的新方法? –
如何將'一個='12''有時間價值?它是一個帶有「12」的字符串。你想知道是否有一系列代表'12:00'的數字嗎?你的問題不是很清楚你想要什麼。 –
@theTinMan只是爲了練習的目的,假設12是一個不正確的值。我不想把這個變成時間... –