簡體   English   中英

Ruby-忽略代碼中的“退出”

[英]Ruby - ignore “exit” in code

考慮以下代碼:

class Bar
  def initialize
    puts 'Hi from class Bar.'
    exit
  end
end


class Foo
  def initialize
    loop {
      case $stdin.gets.chomp
      when 'foo'
        puts 'Hi from class Foo.'
      when 'bar'
        Bar.new
      end
    }
  end
end

我可以以某種方式忽略Bar類的退出嗎?

它終止了我的循環。 我不要

注意-實際的代碼庫比這更大,更復雜。 但這歸結為我是否可以忽略exit()的問題。

loop {
  begin
    Bar.new
  rescue SystemExit
    p $!  #: #<SystemExit: exit>
  end
}

這將無限循環打印#<SystemExit: exit> ,而不會退出。

在上下文中定義exit方法的一種怪誕方式:

class Bar; def exit; end; end

之所以有效,是因為初始化程序中的exit將被解析為self.exit 1 另外,這種方法允許在對象創建后使用它,如: b = B.new

但實際上, 應該這樣做:首先不要exit (甚至puts )。

(以及為什么intiailizer中會出現“無限”循環和/或用戶輸入?整個問題主要是代碼結構不良的結果。)


1記住Kernel#exit 只是一種方法。 由於內核包含在每個對象中,因此僅exit通常會解析為Object#exit 但是,可以通過引入如圖所示的覆蓋方法來更改它-沒什么花哨的。

暫無
暫無

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

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