2017-12-31 158 views
3

を乗算するためにどのように* bの= A + A + ...(B回)。私はpythonでそれを私がするのと同じ方法でやってみました: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文字を:文字列のIntでなければなりません。そこ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 
    } 
} 
3

tokiop's answerをビルドするには、times関数を定義して静的な拡張として使用することもできます。

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(""); 
    } 
} 

try.haxe.org demo here

2

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は、異なるターゲットに対して最適化されています。たとえば、JavaScriptターゲットでは、文字列を使用しているかのようにコンパイルされます。https://api.haxe.org/StringBuf.html

関連する問題

 関連する問題