完全に個人的な備忘録

完全に個人的な備忘録。学習コストが高くなってきたので、メモしておかないと…片っ端から忘却の彼方なのです。

今更 string-to-int が廃止されていた事を知った

emacsを25から26へVersion upし、起動したら、以下のエラーが出力された。

Symbol's function definition is void: string-to-int

エラーの発生箇所は自分で書いた init.el っぽい。で、エラーになった init.el を確認したところ

 (>= (string-to-int emacs-version) 21)

う~む。string-to-int 関数は emacs26で廃止されたようだ。どうでも、良いけど、emacsのVersionによって処理を分岐させていたんだね。
閑話休題
emacs25で
(describe-function 'string-to-int) してみたら

string-to-int is an alias for ‘string-to-number’ in ‘subr.el’.

(string-to-int STRING &optional BASE)

This function is obsolete since 22.1;
use ‘string-to-number’ instead.

なんと、22.1から string-to-number の alias だったらしい。そんなわけで、emacs25で確認したみたら…

(string-to-number "1.23")
1.23
(string-to-int "1.23")
1.23

なんと、全然 int になっていないし。っという事で、件のコードは単純に以下のコードに置き換える事ができる。

 (>= (string-to-number emacs-version) 21)

そして、より正確に書くなら、小数点以下を切り捨てるように

 (>= (floor (string-to-number emacs-version)) 21)

と書くべきか。上記の例の場合は結果は変らないけど。

(defun string-to-int (string &optional base)
    (floor (string-to-number string base)))

を定義しておこうかな。私は string-to-int を多用していたので。

Emacs26になって、少し速くなったような気がする。速くっていうより、固まらなくなったと言った方が正しいかな。