私はAWKスクリプトを作成していますが、その時点でかなり大きな混乱がありました。(主にAwkスクリプトスキルを向上させたいからです)AWKカレー関数 - 関数が関数を返すことはできますか?
AwkやGawk内でオブジェクト指向プログラミングを行う方法ですが、少なくともカレー関数を使う方法はありますか?関数内から関数を返すときと同じように? (実行された機能の結果を返すのではなく、が実行することができる機能を返さない)
私は@GreenFoxが可能でに格納されている機能の名称と機能を実行することを示した0を発見しました変数。彼が投稿した例は以下の通りです:
function foo(s){print "Called foo "s}
function bar(s){print "Called bar "s}
{
var = "";
if(today_i_feel_like_calling_foo){
var = "foo";
}else{
var = "bar";
}
@var("arg"); # This calls function foo(), or function bar() with "arg"
}
私は、別の機能から関数を返すことができるのだろうかと思っています。
例えば、awks printf
で使用できる文字列を受け取り、2つの他の引数を受け入れ、実質的にprintf(fmt_from_parent_func, sub_func_arg1, sub_func_arg2)
を実行する関数を返す関数です。ここで
は、次のことを達成しようとしているの私の試みです:
エラーになり#! /usr/local/bin/awk -f
function setFmt (fmt){
function _print (var, val){
printf (fmt ? fmt : "%-15s: %s\n"), str1, str2
}
return @_print
}
BEGIN {
fmtA = setFmt("%-5s: %s\n")
@fmtA("ONE","TWO")
}
:
awk: ./curry.awk:4: function _print (var, val){
awk: ./curry.awk:4: ^syntax error
awk: ./curry.awk:4: function _print (var, val){
awk: ./curry.awk:4: ^syntax error
awk: ./curry.awk:6: printf (fmt ? fmt : "%-15s: %s\n"), str1, str2
awk: ./curry.awk:6: ^unexpected newline or end of string
awk: ./curry.awk:11: fmtA = setFmt("%-5s: %s\n")
awk: ./curry.awk:11: ^unexpected newline or end of string
awk: ./curry.awk:12: @fmtA("ONE","TWO")
awk: ./curry.awk:12: ^unexpected newline or end of string
これは可能な限り、誰もが知っている場合(イムは自分自身を見始めています)、そしてこの効果のために何かを達成する方法を知っている...それはすばらしいだろう。
ありがとうございます!
ないかなり。これは、Awkの機能がステートフルでないため、これを実現する方法がないようです。 – Justin
あなたは「あまりにも」について詳しく説明できますか?私が投稿したコードは何をしなければならないのですか?それを避けて、簡潔でテスト可能なサンプル入力と期待される出力で、あなたがしようとしていることを(あなたがそれをやろうとしているのとは反対に)見せることができれば、誰かがあなたはawkで慣用的にやろうとしていますか? –