Previous: , Up: Arguments   [Contents][Index]


1.8.5 The message Function

message関数は+のように可変個の引数を受け取ります。これはユーザーにメッセージを送信されるために関数で、とても便利な関数なのでここで説明しておきます。

メッセージがプリントされるのはエコーエリアです。たとえば以下のリストを評価すれば、エコーエリアにメッセージをプリントできます:

(message "This message appears in the echo area!")

二重引用符の間にある文字列全体で単一の引数であり、それがそっくりそのままプリントされます。(この例において、エコーエリアにプリントされるメッセージ自体が二重引用符に括られていることに注意してください。なぜならあなたが目にしているのは、message関数がリターンした値だからです。あなたが記述するプログラム内でmessageを使用するほとんどの場合においては、副作用のためにテキストは引用符で括られずにエコーエリアにプリントされるでしょう。これの例についての詳細はSee multiply-by-seven in detailを参照してください。)

ただし括られた文字列の中に‘%s’が存在する場合には、message関数は‘%s’をそのままプリントせずに、括られた文字列の後続する引数を調べます。そして2つ目の引数を評価した値を、文字列内の‘%s’がある位置にプリントします。

以下の式の後にカーソルを置いてC-x C-eをタイプすれば、これを確認することができます:

(message "The name of this buffer is: %s." (buffer-name))

Infoモードではエコーエリアに"The name of this buffer is: *info*."がプリントされるはずです。buffer-nameはバッファーの名前を文字列としてリターンする関数であり、message関数がそれを%sの場所に挿入したのです。

値を整数としてプリントするには、‘%s’と同じ方法で‘%d’を使います。たとえば以下の式を評価すれば、fill-columnの値を示すメッセージがエコーエリアにプリントされます:

(message "The value of fill-column is %d." fill-column)

わたしのシステムでこのリストを評価した際には、エコーエリアに"The value of fill-column is 72."が表示されました5

引用符に括られた文字列に‘%s’が2つ以上ある場合には、引用された文字列の1つ後ろにある引数の値が1つ目の‘%s’の場所n、2つ後の引数の値が2つ目の‘%s’の場所に、といった具合にプリントされます。

たとえば以下を評価してください

(message "There are %d %s in the office!"
         (- fill-column 14) "pink elephants")

少々奇妙なメッセージがエコーエリアに表示されるでしょう。わたしのシステムでは"There are 58 pink elephants in the office!"でした(訳注: ピンクの象はアルコールや麻薬による幻覚症状に使用される動物)。

(- fill-column 14)が評価された結果の数値が‘%d’の場所に挿入されます。そして二重引用符に括られた"pink elephants"という文字列は単一の引数として扱われて、‘%s’の場所に挿入されます(つまり二重引用符に括られた文字列が、数値の場合のように文字列自体に評価されるのです)。

最後に数値計算だけではなく、‘%s’に置換されるテキストを生成するような式も利用できることを示す若干複雑な例を説明しておきます:

(message "He saw %d %s"
         (- fill-column 32)
         (concat "red "
                 (substring
                  "The quick brown foxes jumped." 16 21)
                 " leaping."))

この例のmessageには"He saw %d %s"という文字列、(- fill-column 32)という式、そして関数concatで始まる式という3つの引数があります。(- fill-column 32)を評価した結果の値は‘%d’、concatで始まる式がリターンした値は‘%s’の場所に挿入されます(訳注: 完全に余談ですが、"The quick brown fox ..."は英語版のいろはにほへと ...)。

この式を評価するとあなたのfill-columnの値が70の場合には、エコーエリアに"He saw 38 red foxes leaping."というメッセージが表示されることでしょう。


Footnotes

(5)

実際のところは数値をプリントするために%sを使うことができます。これは特別なことではありません。%dは小数点の左側だけをプリントして、数値以外のものはプリントしません。

This page has generated for branch:work/add_lispintr, commit:65845cf60c073f2f3182d1d07483530e9bbe1d96 to check Japanese translation.