我正在將源文件拆分爲令牌,特別是掃描標識符。但是,要求標識符長達30個字符。當一個標識符達到這個長度時,我會發出一條異常消息:'Identifiers can only be 30 characters long, truncating..'
。在引發異常後保留變量
這是應該如何,但是當我提出這個異常時,我跳出了我的方法,在我能夠存儲它之前掃描標識符。我需要以某種方式提出異常並保留迄今收集的標識符。任何想法如何做到這一點?
# classify each character, and call approriate scan methods
def tokenize()
@infile.each_char do |c|
begin
case c
when /[a-zA-Z\$]/
scan_identifier(c)
when /\s/
#ignore spaces
else
#do nothing
end
rescue TokenizerError => te
puts "#{te.class}: #{te.message}"
end
end
end
# Reads an identifier from the source program
def scan_identifier(id)
this_id = id #initialize this identifier with the character read above
@infile.each_char do |c|
if c =~ /[a-zA-Z0-9_]/
this_id += c
# raising this exception leaves this function before collecting the
# truncated identifier
raise TokenizerError, 'Identifiers can only be 30 characters long, truncating..' if this_id.length == 30
else
puts "#{this_id}"
break # not part of the identifier, or an error
end
end
end
例外應僅用於「例外」情況。不要試圖用它們創建程序流。只需從您的方法中返回令牌。 – 2012-02-08 05:10:03
這不是一個程序流程問題。我需要向正在使用該程序的人發出警告,說明他們的標識符太長,並且正在被截斷。我認爲一個例外將是這樣做的合理方法。什麼會是一個很好的選擇? – 2012-02-08 05:11:59
讓我把它變成一個答案。 – 2012-02-08 05:28:02