AWK 스크립트를 작성 중입니다. AWK 스크립팅 기술을 개선하고 싶기 때문에 주로 개선하고 있습니다.AWK 카레 함수 - 함수가 함수를 반환 할 수 있습니까?
나는 존재하지 않는다는 것을 알고 있습니다. Awk 또는 Gawk 내에서 객체 지향 프로그래밍을 수행하는 방법이지만 최소한 카레 기능을 수행 할 수있는 방법이 있습니까? 함수 내에서 함수를 반환 할 때와 마찬가지로? (실행 된 함수의 결과를 반환 아니라 는 실행될 수있는 함수 반환하지) I는 @GreenFox 그 수에 저장된 함수의 이름과 기능을 실행할 수 있음을 보여 주었다 Stack Overflow post을 발견
을 변수. 그가 게시 한 예제는 아래와 같습니다 :
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
에서 사용할 수있는 문자열을 받아들이고 두 개의 다른 인수를 허용하는 함수를 반환하며 본질적으로 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에서 관용적으로 행동하려고합니다. –