2017-12-31 15 views
3

을 증식하는 방법이 는 * B = A + A + A (B 시간). 파이썬에서 그것을 나는 것 같은 방식으로 일을 시도했다 :Haxe : <em>B</em> 등 일부 정수 내가 어떤 캐릭터에게</em><em>을 증식하기 위해 노력하고있어 문자열

class Test { 
    static function main() { 
     var a = "Text"; 
     var b = 4;  
     trace(a * b); //Assumed Output: TextTextTextText 
    } 
} 

하지만이 빌드 실패 Test.hx 제기 : 6 : 문자 14 ~ 15 : 문자열 지능해야한다. 거기 Haxe 프로그래밍 요리 책 또는 문자열을 곱하여에 대한 API 문서에있는 정보가 될 것 같지 않습니다, 그래서 내가 사용하는 경우는 내가 뭔가를 잘못 입력하거나 한 경우 궁금하네요 :

class Test { 
    static function main() { 
     var a = "Text"; 
     var b = 4; 
     var c = ""; 

     for (i in 0...b) { 
      c = c + a; 
     } 
     trace(c); // Outputs "TextTextTextText" 
    } 
} 
+0

예를 들어 답을 업데이트했습니다. – k0pernikus

답변

3
매우 짧은하지

하지만 array comprehension을 어떤 상황에서 도움이 될 수 있습니다 :

class Test { 
    static function main() { 
     var a = "Text"; 
     var b = 4; 
     trace([for (i in 0...b) a].join("")); 
     //Output: TextTextTextText 
    } 
} 

try.haxe.org에 참조하십시오.

4

숫자 곱셈 연산자 *에는 정수와 같은 숫자 유형이 필요합니다. 너는 끈이있어. 문자열을 곱하기를 원할 경우 루프 내에 대상 문자열을 추가하여 수동으로 문자열을 처리해야합니다.

연산자 + 연산자는 예제에서 숫자 더하기가 아니라 문자열을 결합하는 방법입니다.

당신은 당신이 운영자 overloading으로 원하는 것을 얻을 수 있습니다

abstract MyAbstract(String) { 
    public inline function new(s:String) { 
    this = s; 
    } 

    @:op(A * B) 
    public function repeat(rhs:Int):MyAbstract { 
    var s:StringBuf = new StringBuf(); 
    for (i in 0...rhs) 
     s.add(this); 
    return new MyAbstract(s.toString()); 
    } 
} 

class Main { 
    static public function main() { 
    var a = new MyAbstract("foo"); 
    trace(a * 3); // foofoofoo 
    } 
} 
2

using Test.Extensions; 

class Test { 
    static function main() { 
     trace ("Text".times(4)); 
    } 
} 

class Extensions { 
    public static function times (str:String, n:Int) { 
     return [for (i in 0...n) str].join(""); 
    } 
} 

, 당신은 또한, 시간이 정적 확장 기능을 정의 할 수 있습니다 bsinky 답변을 구축하지만 배열을 방지하려면 :

using Test.Extensions; 

class Test { 
    static function main() { 
     trace ("Text".times(4)); 
    } 
} 

class Extensions { 
    public static function times (str:String, n:Int) { 
     var v = new StringBuf(); 
     for (i in 0...n) v.add(str); 
     return v.toString(); 
    } 
} 

데모 : https://try.haxe.org/#e5937

을 StringBuf는 다른 목표에 맞게 최적화 될 수 있습니다. 예를 들어, 자바 스크립트 대상에서 문자열을 사용하는 것처럼 컴파일됩니다. https://api.haxe.org/StringBuf.html

관련 문제