는 같은 목표를 달성하기 위해 와 간단한 아마도 기능, 고차 패턴이 다음 코드범위 건축 패턴
import std.datetime: Clock, SysTime, Duration;
SysTime[] times;
const n = 3;
foreach (i; 0..n) times ~= Clock.currTime;
을 감안할 때?
가능한 경우 보너스는 일부 내부 편집 패턴을 통해 요소의 복사를 최소화하는 것이 좋습니다.
은 참조 : http://forum.dlang.org/thread/[email protected]#post-yofbijaejfyftpcjdcvd:40forum.dlang.org
업데이트 :
좋아 여기까지 내 시도입니다 :로
enum arityMin0(alias fun) = __traits(compiles, fun());
auto apply(alias fun, N)(N n) if (isCallable!fun &&
arityMin0!fun &&
!is(ReturnType!fun == void) &&
isIntegral!N)
{
import std.range: iota, map;
return n.iota.map!(n => fun);
}
라고, 예를 들어, 왼쪽
import std.datetime: Clock;
auto times = 3.apply!(Clock.currTime).array;
한 세부 . 인수에 대응 실제로 여기 중 하나를 0과 1이기 때문에 제한
arity!fun == 0
는
auto times = 3.apply!(Clock.currTime).array;
에 false
로 평가.
따라서 Clock.currTime
이 기본값 인수를 취하기 때문에 은이 경우에 1
으로 평가됩니다.
어쩌면 arityMin
과 arityMax
이 std.traits
에도 필요합니다.
을 사용하여 arityMin
을 구현해야합니까?
auto times = 3.iota.map!(n => Clock.currTime).array();
번 currTime
평가 :
예. 속성보다는 기능을 테스트하는 것이 좋습니다. 이렇게하면 코드가보다 일반화되고 예를 들어 다음과 같이 작동합니다. 펑터. –