VimScriptでオプションに変数の値を設定(set)したい

Neovim(NVIM v0.4.3)のinit.vimに下のような設定を追加したけど、
undodirs:undodir_pathの値が展開されてなかった。

let s:undodir_path=expand("$HOME/.cache/undodir")
set undodir=s:undodir_path

下のように、オプション名に&をつけてletすれば良さげ。

let s:undodir_path=expand("$HOME/.cache/undodir")
let &undodir=s:undodir_path

下のような複合代入の場合は、上のやり方だと怒られた。

set runtimepath+=s:config_dir

下のように、文字列として展開してexecuteすれば良さげ。

execute 'set runtimepath+=' . s:config_dir

このミス数年単位で忘れた頃に繰り返しハマってる気がする。
これが一般的なやり方なのかはよく分からんとです。

以上。

参考

Vim script の変数のスコープについてのお話 - 永遠に未完成