bash의 "상속"; eval없이 함수를 재정의 할 때 super를 호출하는 방법이 있습니까?

JoL

주어진 파일 m.sh:

f() {
  echo foo
}

g() {
  f | sed -r 's/^|$/:/g' # random work
}

e.sh:

. m.sh

old_f="$(type f | sed '3,$!d')"

f() {
  echo "$(eval "$old_f")bar"
}

g

의 사용보다 더 나은 해결책이 type하고 eval여전히 다른 기능에 참조 있도록 작업을 동일한 이름을 유지하면서 오버라이드 기능에서 이전 함수를 호출은?

m.sh둘 다 e.sh동일한 프로젝트의 일부이므로 m.sh걱정없이 수정할 수 있습니다 .

JoL

내가 할 수있는 일이 바로 나에게 일어났습니다.

f_1() {
  echo foo
}

f() { f_1 "$@"; }

g() {
  f | sed -r 's/^|$/:/g' # random work
}
. m.sh

f_2() {
  echo "$(f_1)bar"
}

f() { f_2 "$@"; }

g

m.sh이러한 상용구를 추가 하기 위해 수정이 필요한 것은 너무 나쁘지만 적어도 type사용을 피합니다 eval.

f()수를 늘리기 위해 수동으로 재정의해야하는 것은 첫 번째 정의를 다음과 같이 한 번 정의하면 방지 할 수 있습니다.

f() {
  "$(last_version_of_function "${FUNCNAME[0]}")" "$@"
}

다음 정의를 사용하여 :

reverse_identifier_words() {
  awk -F_ '
    BEGIN {
      OFS="_"
    }
    {
      for (i = 1; i <= NF / 2; i++) {
        t = $i
        $i = $(NF - i + 1)
        $(NF - i + 1) = t
      }
      print
    }
  '
}

last_version_of_function() {
  declare -F \
  | grep -Eo "\b${1}_[0-9]+\$" \
  | reverse_identifier_words \
  | sort -rn -t_ -k1 \
  | head -n1 \
  | reverse_identifier_words
}

이렇게 e.sh하면 다음을 수행하여 재정의 할 수 있습니다.

. m.sh

f_2() {
  echo "$(f_1)bar"
}

g

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

재정의 할 함수를 지정하는 방법이 있습니까?

분류에서Dev

템플릿과 상속을 함께 사용할 때 멤버 함수를 재정의하는 방법을 모르겠습니다.

분류에서Dev

DependencyProperty를 사용할 때 상속 된 값과 할당 된 값의 차이를 어떻게 알 수 있습니까?

분류에서Dev

이 약한 경고를 어떻게 해결할 수 있습니까? "이 필드는 상속 된 getter 또는 setter를 재정의하지 않습니다."

분류에서Dev

Django 템플릿에서 상속 된 컨테이너를 어떻게 재정의 할 수 있습니까?

분류에서Dev

Python : 쿼리 셋이있는 메서드를 상속하고 재정의하는 방법은 무엇입니까?

분류에서Dev

상속없이 반복기 내부에서 클래스 파일의 함수를 호출하는 방법

분류에서Dev

UiCollectionView에서 scrollViewDidEndDecelerating이 발생할 때 셀의 함수를 호출하는 방법

분류에서Dev

함수를 호출하는 2 개의 상속이있는 Python 슈퍼 클래스

분류에서Dev

super ()를 호출 할 필요없이 새 Injection 클래스로 자식 구성 요소의 생성자를 확장하는 방법이 있습니까?

분류에서Dev

다이아몬드 상속 패턴에서 하나의 가상 상속 만 사용할 수 있습니까?

분류에서Dev

bind를 사용할 때 Javascript 함수에 대한 호출을 변경해야하는 방법이 있습니까?

분류에서Dev

호출 된 함수의 인수를 사용하여 함수를 호출하는 데 사용할 수있는 기술이 있습니까?

분류에서Dev

다중 상속 + PHP의 다중 수준 상속 : 생성자 상속을 해결할 수있는 패턴이나 가능성이 있습니까?

분류에서Dev

상속 된 객체의 유창한 메서드를 호출 할 때 어떻게 순서를 무관하게 만들 수 있습니까?

분류에서Dev

Java의 자식 클래스를 통해 상속 된 함수의 일부를 비활성화하는 방법이 있습니까?

분류에서Dev

AutoMapper를 사용하여 소스 상속없이 대상 상속을 매핑 할 수 있습니까?

분류에서Dev

이 함수를 정의 할 때 함수의 속성을 설정하는 방법은 무엇입니까?

분류에서Dev

다른 모듈에서 EventEmitter의 상속 된 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

속성을 수정하려고 할 때 속성을 인스턴스화하기 위해 Object를 재정의하는 방법이 있습니까?

분류에서Dev

속성을 수정하려고 할 때 속성을 인스턴스화하기 위해 Object를 재정의하는 방법이 있습니까?

분류에서Dev

다른 함수를 호출 할 때 함수를 인수로 정의 할 수없는 이유는 무엇입니까?

분류에서Dev

주 메서드의 참조를 앞에 붙이지 않고 상속 된 공용 메서드를 호출 할 수없는 이유는 무엇입니까?

분류에서Dev

주 메서드의 참조를 앞에 붙이지 않고 상속 된 공용 메서드를 호출 할 수없는 이유는 무엇입니까?

분류에서Dev

상속 된 클래스가 다른 상속 된 클래스의 가상 함수를 재정의 할 수 있습니까?

분류에서Dev

.xib 파일이있는 사용자 정의보기를 상속하는 방법

분류에서Dev

호출 할 때 서브 클래스의 메소드를 호출하지 않는 방법이 있나요?

분류에서Dev

Java8에서는 재정의 된 상속 된 주석을 상속 할 수 없습니다.

분류에서Dev

Java8에서는 재정의 된 상속 된 주석을 상속 할 수 없습니다.

Related 관련 기사

  1. 1

    재정의 할 함수를 지정하는 방법이 있습니까?

  2. 2

    템플릿과 상속을 함께 사용할 때 멤버 함수를 재정의하는 방법을 모르겠습니다.

  3. 3

    DependencyProperty를 사용할 때 상속 된 값과 할당 된 값의 차이를 어떻게 알 수 있습니까?

  4. 4

    이 약한 경고를 어떻게 해결할 수 있습니까? "이 필드는 상속 된 getter 또는 setter를 재정의하지 않습니다."

  5. 5

    Django 템플릿에서 상속 된 컨테이너를 어떻게 재정의 할 수 있습니까?

  6. 6

    Python : 쿼리 셋이있는 메서드를 상속하고 재정의하는 방법은 무엇입니까?

  7. 7

    상속없이 반복기 내부에서 클래스 파일의 함수를 호출하는 방법

  8. 8

    UiCollectionView에서 scrollViewDidEndDecelerating이 발생할 때 셀의 함수를 호출하는 방법

  9. 9

    함수를 호출하는 2 개의 상속이있는 Python 슈퍼 클래스

  10. 10

    super ()를 호출 할 필요없이 새 Injection 클래스로 자식 구성 요소의 생성자를 확장하는 방법이 있습니까?

  11. 11

    다이아몬드 상속 패턴에서 하나의 가상 상속 만 사용할 수 있습니까?

  12. 12

    bind를 사용할 때 Javascript 함수에 대한 호출을 변경해야하는 방법이 있습니까?

  13. 13

    호출 된 함수의 인수를 사용하여 함수를 호출하는 데 사용할 수있는 기술이 있습니까?

  14. 14

    다중 상속 + PHP의 다중 수준 상속 : 생성자 상속을 해결할 수있는 패턴이나 가능성이 있습니까?

  15. 15

    상속 된 객체의 유창한 메서드를 호출 할 때 어떻게 순서를 무관하게 만들 수 있습니까?

  16. 16

    Java의 자식 클래스를 통해 상속 된 함수의 일부를 비활성화하는 방법이 있습니까?

  17. 17

    AutoMapper를 사용하여 소스 상속없이 대상 상속을 매핑 할 수 있습니까?

  18. 18

    이 함수를 정의 할 때 함수의 속성을 설정하는 방법은 무엇입니까?

  19. 19

    다른 모듈에서 EventEmitter의 상속 된 함수를 호출하는 방법은 무엇입니까?

  20. 20

    속성을 수정하려고 할 때 속성을 인스턴스화하기 위해 Object를 재정의하는 방법이 있습니까?

  21. 21

    속성을 수정하려고 할 때 속성을 인스턴스화하기 위해 Object를 재정의하는 방법이 있습니까?

  22. 22

    다른 함수를 호출 할 때 함수를 인수로 정의 할 수없는 이유는 무엇입니까?

  23. 23

    주 메서드의 참조를 앞에 붙이지 않고 상속 된 공용 메서드를 호출 할 수없는 이유는 무엇입니까?

  24. 24

    주 메서드의 참조를 앞에 붙이지 않고 상속 된 공용 메서드를 호출 할 수없는 이유는 무엇입니까?

  25. 25

    상속 된 클래스가 다른 상속 된 클래스의 가상 함수를 재정의 할 수 있습니까?

  26. 26

    .xib 파일이있는 사용자 정의보기를 상속하는 방법

  27. 27

    호출 할 때 서브 클래스의 메소드를 호출하지 않는 방법이 있나요?

  28. 28

    Java8에서는 재정의 된 상속 된 주석을 상속 할 수 없습니다.

  29. 29

    Java8에서는 재정의 된 상속 된 주석을 상속 할 수 없습니다.

뜨겁다태그

보관