funA(x), funB(x), funC(x), funD(x), funE(x), funF(x)라는 여러 함수를 작성했습니다. 이제 특정 매개변수를 기반으로 하는 요구사항이 생겼습니다.str, 다양한 계산을 구현합니다. 예를 들어 str='abc' 일 때, x→funA(x)→funB(x)→funC(x)→y 가 실행될 수 있습니다. str'ace' 일 때, x→funA(x ). →funC(x)→funE(x)→y.
<code>function fun_abc(x) { var a = funA(x); var b = funB(a); var c = funC(b); var y = c; return y; }</code>
str을 기반으로 케이스를 만들고 다른 fun_XXX()로 점프하는 스위치를 작성할 수 있다는 것을 알고 있지만 이는 유연하지 않습니다. 저의 궁극적인 목표는 함수 이름이 다른 배열을 순서대로 작성하는 것입니다. 호출 시 x를 입력하고 배열의 첫 번째 요소에 해당하는 함수를 마지막 함수까지 실행하고 최종 결과 y를 출력합니다.
다른 축약형은 없나요? 아니면 자유로운 조합을 달성할 수 있습니까? 예를 들어 funstr='abc'와 같은 변수를 기반으로 동일한 이름을 가진 함수를 직접 실행하고 funstr(x)와 같은 것을 실행하면 함수 abc(x)가 실행됩니까?
js 또는 php 관련 구문이 허용됩니다.
funA(x), funB(x), funC(x), funD(x), funE(x), funF(x)라는 여러 함수를 작성했습니다. 이제 특정 매개변수를 기반으로 하는 요구사항이 생겼습니다.str, 다양한 계산을 구현합니다. 예를 들어 str='abc' 일 때, x→funA(x)→funB(x)→funC(x)→y 가 실행될 수 있습니다. str'ace' 일 때, x→funA(x ). →funC(x)→funE(x)→y.
<code>function fun_abc(x) { var a = funA(x); var b = funB(a); var c = funC(b); var y = c; return y; }</code>
str을 기반으로 케이스를 만들고 다른 fun_XXX()로 점프하는 스위치를 작성할 수 있다는 것을 알고 있지만 이는 유연하지 않습니다. 저의 궁극적인 목표는 함수 이름이 다른 배열을 순서대로 작성하는 것입니다. 호출 시 x를 입력하고 배열의 첫 번째 요소에 해당하는 함수를 마지막 함수까지 실행하고 최종 결과 y를 출력합니다.
다른 축약형은 없나요? 아니면 자유로운 조합을 달성할 수 있습니까? 예를 들어 funstr='abc'와 같은 변수를 기반으로 동일한 이름을 가진 함수를 직접 실행하고 funstr(x)와 같은 것을 실행하면 함수 abc(x)가 실행됩니까?
js 또는 php 관련 구문이 허용됩니다.
예를 들어보겠습니다. eval은 너무 무례합니다. . . 형님 나 좀 보러오세요
<code>function run(str, param) { let handle = { a: a, b: b, c: c, d: d }; return str.split('').reduce((res, name) => handle[name](res), param); function a(x) { return x + '1'; } function b(x) { return x + '2'; } function c(x) { return x + '3'; } function d(x) { return x + '4'; } } run('acb',0); // "0132"</code>
예를 들어 유사한 아이디어를 자유롭게 사용할 수 있습니다
@토마토를 싫어하는 물고기 기준으로 개선
run
함수를 호출할 때마다 4개의 함수와 하나의 맵이 생성되어야 하는데, 이는 상당히 비용이 많이 듭니다. run
밖에 가지고 다닐 수 있습니다.
reduce
forEach
<code>const funcTable = { a, b, c, d } function run(str, initialVal) { return str.split('').reduce((result, funcName) => funcTable[funcName](result), initialVal) } // 定义function a, function b...</code>
가장 간단한 평가
성가신 {'abc': fabc}
아이디어는 매우 간단합니다. php
및 node
php
버전
<code>function funstr($str,$param){ $len = strlen($str); for($i=0;$i<$len;$i++){ $fun = 'fun'.strtoupper(substr($str,$i,1)); if(function_exists($fun)){ $param = $fun($param); } } return $param; } function funA($x) { return $x+1; } function funB($x) { return $x+2; } echo funstr('ab',0); // 输出3</code>
node
버전
<code>function funstr(str,x) { var len = str.length; for(var i=0; i<len; i++){ var fun = 'fun'+ str.charAt(i).toUpperCase(); x = eval(fun+'('+x+')'); } return x; } function funA(x){ return x+1; } function funB(x){ return x+2; } console.log(funstr('ab',0));//输出3</code>
정의된 함수를 모두 객체에 넣고 반환 값을 설정한 후 호출하세요.
var ab={
<code> a:function(x){console.log(x);return 1}, b:function(x){console.log(x);return 2}, c:function(x){console.log(x);return 3}, d:function(x){console.log(x);return 4}, } function run(str,x){//str是定义的顺序,如acb;x是你要传的参数 var b=x; var aa=str.split("") aa.forEach(function(x){ ab[x](b); b=ab[x](b); }) return b }</code>