<< 14/50 >>
First Last

Quine を書く

eval がある言語を使うとデータ部分自体を実行できる

eval の中では「この文章」という自己参照が許されている

  eval(q="puts 'eval(q=%p)'%q")

この形の良いところはコード量が増えた時に一箇所しかいじらなくて良いこと

  printf q="printf q=%p,q",q

例えば This is a Quine というコメントを足すことを考えると

  eval(q="puts 'eval(q=%p)'%q  # This is a Quine")
  printf q="printf q=%p,q  # This is a Quine",q  # This is a Quine

Ruby では String#% が sprintf で %p は pretty print してくれるフォーマット