zsh - "eval"を使用して未定義の内部関数にローカル変数を使用できるようにする方法は?

zsh -

次のzsh機能があります。

outer_func () {
    local LOCAL_VAR='test'
    inner_func () {
        echo "${LOCAL_VAR}"
    }
}

$LOCAL_VAR利用できないところinner_func

aを使用して値にアクセスできるようにeval定義できることを知っています。これを行う別の方法があるかどうか疑問に思います。inner_func$LOCAL_VAR

編集:zsh 5.8でテストされました。

$ cat test.zsh
outer_func () {
    local LOCAL_VAR='test'
    inner_func () {
        echo "${LOCAL_VAR}"
    }
}

echo 'executing outer_func'
outer_func
echo 'executing inner_func'
inner_func

$ ./test.zsh
executing outer_func
executing inner_func

$

outer_func編集2:説明:実際に変数を一連のsに設定するために使用していますinner_func。これはsが機能するために重要であり、inner_func定義された後にsをouter_func呼び出す必要がありますinner_func

ベストアンサー1

Zshには「固有の機能」というものはありません。あなたがouter_funcすることは、呼び出すたびに一般的inner_funcに利用可能な一般的な関数を生成することです(そして名前付きの既存の関数を上書きしますinner_func)。しかし、outer_func実際にはそうではありません。呼ぶ inner_func。ただそれを作成するだけです。

おそらくあなたが望むものは次のとおりです。

outer_func () {
  local LOCAL_VAR='test'
  inner_func
}

inner_func () {
  echo "${LOCAL_VAR}"
}

次に呼び出すと、outer_func結果はinner_funcechoになりますtest


PS:そこではローカル変数を使用する必要はありません。ただ使えます位置パラメータ代わりに:

outer_func() {
  inner_func 'test'
}

inner_func() {
  print - "$1"
}

おすすめ記事