問題タブ [phobos]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
d - phobos (D の標準ライブラリ) には、文字列型の「endsWith」が含まれていますか?
文字列がサフィックスで終わっているかどうかをテストする関数が必要です。このタスクには「lastIndexOf」を使用できますが、標準の phobos 機能があるのだろうか?
d - uint をバイナリ文字列に変換するための Phobos ライブラリ関数
符号なし整数をバイナリ文字列に変換するフォボス関数はありますか? 検索しましたが、見つかりませんでした。自分で作成して車輪を再発明していないことを確認したいだけです。
function - D で標準ライブラリ関数をモックする方法
ファイル名で isFile (std.file から) を呼び出し、.1、.2、.3 などを追加して、それぞれが存在するかどうかを確認する関数があります。
関数の単体テストを行いたいのですが、そのためには isFile をモックする必要があります。
少し調べてみたところ、クラスをモックする方法が見つかりましたが、単一の関数は見つかりませんでした。
json - std.json - TRUE、FALSE、および NULL 値と少し混乱しています
std.json
私が取り組んでいるプログラムの一部としてライブラリを見ていましたがJSONValue
、型がTRUE
、FALSE
またはと推測される s からデータを取得する方法について少し混乱していますNULL
。
たとえば、次の JSON を解析するとします。
"foo"
次に、次のようにして、属性に保持されている文字列を抽出できます。
しかし、代わりに、次のような JSON があったとします。
"foo"
、"bar"
およびの属性値を取得するには、何をする必要があり"baz"
ますか?
d - std.algorithm.find は範囲要素への参照を要求する必要がありますか?
私は、クラスベースの有限ランダム アクセス範囲に取り組んできました。それにいくつかのテストを実行するとき:
上記のスニペットの最後の行に関して、GDC 4.9.2 でこのコンパイル エラーが発生しました: "algorithm.d|4838|error: foreach: cannot make e ref"
エラーは、std.algorithm.find
(find_if バリアント、範囲と述語を取る) のこのコード部分を指しています。これは、実際には次の各要素への参照を取りますforeach
。
これは、引数opApply
を提供しないの実装を提供したために発生する可能性が最も高いです(クラスは他のメンバー関数への戻り値の型も提供しません)。ref
ref
それを変更することもできますが、本当に気になるのは、現在、範囲クラスが関数の前提条件に準拠しており、foreach
とにかく反復が引き続き機能することです。ドキュメントからの引用:
構造体およびクラス オブジェクトの反復は、範囲を使用して実行できます。の場合
foreach
、これは次のプロパティとメソッドを定義する必要があることを意味します。プロパティ:
.empty
それ以上要素がない場合は true を返します.front
範囲の左端の要素を返す方法:
.popFront()
範囲の左端を 1 つ右に移動する
これらはすべて提供されているので (それ以外の場合はランダム アクセス範囲にはなりません)、それらを使用する必要があります。代わりに、次に説明する別の反復方法を探している可能性があります。
集計式が構造体またはクラス オブジェクトであり、範囲プロパティが存在しない場合、foreach は特別な
opApply
メンバー関数によって定義され、foreach_reverse 動作は特別なopApplyReverse
メンバー関数によって定義されます。これらの関数の型は次のとおりです。
int opApply(int delegate(ref Type [, ...]) dg);
私の解釈では、これは探すべきではありませんでした。
またstd.algorithm.all
、参照の反復を必要としないように見える も引用します。
bool all(Range)(Range range) if (isInputRange!Range && is(typeof(unaryFun!pred(range.front))));
入力範囲 range で見つかったすべての値 v が述語 pred を満たす場合に限り、true を返します。(最大で) Ο(range.length) 回の pred の評価を実行します。
これは Phobos ライブラリのバグで、std.algorithm.find
そもそも値で反復する必要があるのでしょうか? それとも、私が見逃したことがありますか?
datetime - 伊達巻はどこで役に立つの?
私はフォボスのドキュメントを読んでいます。一部のメソッドのロジックを理解できないことがあります。
指定された年数または月数をこの Date に追加します。負の数は減算されます。ローリングと追加の違いは、ローリングは大きなユニットには影響しないということです。
フォボスはよく考えられていないのかもしれません。それがどこで役立つのか理解していないのかもしれません。
たとえば、2013-07-01 に 200 日を追加すると、2014 年になると予想されますが、2013 年にはなりません。
ロジックを説明できる人はいますか?
d - D の文字列から部分文字列を削除する
別の文字列のすべての出現を削除する方法は? 次のコードを使用してこれを行うことができます。
しかし、フォボスにこれ専用の機能があるのだろうか?
d - 述語関数で std.algorithm.count を使用できない理由
次のコードはコンパイルに失敗します。
エラーメッセージで:
しかし、[標準ライブラリ ( http://dlang.org/phobos/std_algorithm_searching.html#.count ) は、述語を取り、述語が true を返すcount
すべての要素をカウントするオーバーロードがあることを明確に示しています。では、この方法R
を使用しようとすると、コンパイラが文句を言うのはなぜですか?count