1

私はRubyを学んでいて、複合'if'ステートメントを機能させることができませんでした。これが私のコードです(うまくいけば自明です)

commentline = Regexp.new('^;;') 
blankline = Regexp.new('^(\s*)$')

if (line !~ commentline || line !~ blankline)
  puts line
end

変数'line'は、次のファイルを読み取ることで取得されます。

;; alias filename backupDir

Prog_i  Prog_i.rb ./store
Prog_ii Prog_ii.rb ./store

これは失敗し、理由はわかりません。基本的に、ファイル内の行の処理中にコメント行と空白行を無視する必要があります。ご協力いただきありがとうございます。

4

3 に答える 3

6

ANDを使用する必要があります

基本的にあなたはDeMorganを適用した後にnot (blank or comment)どちらが変わるかを望みますnot blank and not comment

if (line !~ commentline && line !~ blankline)
  puts line
end

また

unless(line ~= commentline || line ~= blankline)
  puts line
end

どちらが読みやすいかによって異なります

于 2012-12-07T00:08:57.020 に答える
1

あなたはこれをもっと簡潔に書くことができます

puts DATA.readlines.reject{|each|each =~ /^;;|^\s*$/}

__END__
;; alias filename backupDir

Prog_i  Prog_i.rb ./store
Prog_ii Prog_ii.rb ./store
于 2012-12-07T01:15:15.943 に答える
1

これはあなたのコードです:

commentline = Regexp.new('^;;') 
blankline = Regexp.new('^(\s*)$')

if (line !~ commentline || line !~ blankline)
  puts line
end

そして私が同じことをどのように書くか:

[
  ';; alias filename backupDir',
  '',
  'Prog_i  Prog_i.rb ./store',
  'Prog_ii Prog_ii.rb ./store'
].each do |line|

  puts line if (!line[/^(?:;;)?$/])

end

どの出力:

;; alias filename backupDir
Prog_i  Prog_i.rb ./store
Prog_ii Prog_ii.rb ./store
于 2012-12-07T02:08:38.247 に答える