問題タブ [side-effects]

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.

0 投票する
4 に答える
302 参照

c++ - C++ 11で関数呼び出し後にオブジェクトを無効として宣言する方法は?

関数が戻った後に関数への入力引数を無効として宣言する方法は C++11 にありますか?

簡単な例として、左下隅の座標と右上隅の座標を持つ四角形オブジェクトがあるとします。この四角形オブジェクトを関数への非 const 参照で渡すと、関数は自由に四角形メモリに副作用を与えます。その関数がスケーリングする必要があり、新しいメモリにコピーするのではなく、その場で動作したい場合、関数が戻った後、渡された四角形の内容が有効でなくなったことを C++11 でどのように宣言できますか?呼び出された関数によって変更された可能性がありますか?

四角形クラスを変更したくはありませんが、関数呼び出しの宣言に、関数からの戻り時に参照によって渡されたメモリが無効であると見なされ、呼び出し元が関数呼び出しが戻った後にそれを使用しようとします。C++11でこれを行う方法はありますか?

0 投票する
4 に答える
597 参照

regex - Perlのm//g演算子によって、テキストにNULLが導入されることがあるのはなぜですか?

最近、Perlスクリプトの1つで奇妙な結果に遭遇しました。そこでは、NULL文字(Perlでは\ 0)がテキストに導入されていました。最終的に、Perl m//match演算子で誤って使用されている//g演算子まで追跡しました。これが起こるまで、私はs ///演算子でしか使用していなかったので、m//演算子で//gを使用できることに気づいていませんでした。

いずれにせよ、誤った// gを削除してバグを修正したとしても、この小さなスクリプトがテキストにNULL文字を導入する理由を知りたいです。:-)

NULLが表示されないようにする微妙な変更:$ textの値を変更すると(たとえば、「0」だけ、「1」だけ、または他の多くの組み合わせに)、NULLは導入されなくなります。割り当て値を「A$1」から「$1」に変更すると、NULLは導入されなくなります。まったく異なる変数に「A$1」を割り当てると、その変数にNULLが導入されません。また、m//の一致中に//g演算子を削除すると、NULLは導入されません。

Perlの第一人者はこの振る舞いを説明できますか?グーグルで何も見つかりませんでした。

0 投票する
2 に答える
193 参照

python - Python でモジュールをリロードするときに副作用のあるグローバル オブジェクトを管理する

オペレーティング システムのリソース (ファイルやスレッドなど) を使用するモジュール レベルのグローバル変数を正しく管理する方法を探しています。

問題は、モジュールがリロードされたときに、新しいリソースを作成する前に、リソースを適切に破棄する必要があることです (ファイルを閉じるか、スレッドを終了するなど)。

したがって、これらのシングルトン オブジェクトを管理するには、より優れたパターンが必要です。

0 投票する
2 に答える
1552 参照

java - Java volatile と副作用

アトミック アクセスに関する Oracle のドキュメント ( http://docs.oracle.com/javase/tutorial/essential/concurrency/atomic.html ) には、次のように書かれています。

「揮発性変数は事前発生関係を確立します....これは、スレッドが揮発性変数を読み取るときに、揮発性変数への最新の変更だけでなく、原因となったコードの副作用も確認することを意味します変化。"

私はそれについて頭を包むのに苦労しています。揮発性変数がどのように機能するかは理解していますが (>= Java 5)、Java が揮発性変数の変更に「つながった」副作用をどのように決定するのか疑問に思っています。

だから私の質問は次のとおりだと思います:この保証にはどのような副作用がありますか?

編集:

したがって、スレッド A が揮発性変数を変更し、次にスレッド B がそれを読み取る場合、揮発性変数への書き込みの前に発生したスレッド A からのすべての書き込みは、スレッド B に関して「一貫性が保たれる」ことを学びました (つまり、キャッシュされた値スレッド A による前述の書き込みの対象となる変数の数は、スレッド B で無効化されます)。私が間違っている場合は修正してください。

0 投票する
1 に答える
128 参照

c++ - ここで単純なものが欠けています (ランタイム実行の優先順位?)

この単純なコードの実行:

(Linux)につながります:

*ptr=0 が 2 行目にあり、4 行目にない理由を説明してください。「もの」はcout右から左に「取り出される」ということでしょうか?よりも - それは実際にどのように機能しますか (実行時に段階的に)?

0 投票する
1 に答える
3770 参照

java - Functional Java's Effect に似た Guava の何か?

純粋な関数型プログラミングの目標の 1 つは、可変性を排除し、それによって副作用を排除することであることを私は知っています。しかし、現実を直視してみましょう。Java は、関数型プログラミング ライブラリがすべて存在するにもかかわらず、関数型言語ではありません。実際、一部の FP ライブラリはこれを認識し、期待しているようです。たとえば、Functional Java にはEffectクラスがあります。Jedi FP ライブラリには、Commandインターフェイスがあります。これによりIterable、厄介な for ループのボイラープレートを使用せずに、型安全性を備えたコマンド パターンを の要素に適用できます。

問題は、グアバにそのようなものはありますか?

明確化のために回答が受け入れられた後に編集

私は、特定の状況下で、ほとんどの Java FP ライブラリに固有の「垂直問題」に役立つフレームワークを開発しています。したがって、上記のコード例を実際には作成しませんCommand。つまり、宣言の直後にすぐに適用する目的で、垂直方向のノイズの厄介さをすべて備えた の新しいクラス実装を明示的に宣言します。

私は実際のコマンド パターンの行に沿ってより多くのことを考えていました。別の場所で宣言されたいくつかの可能なコマンドがあり、そのうちの 1 つだけがそれを繰り返し適用したいコードに渡されます。さらに、私のフレームワークの目標は、単純に縦の問題を別の場所に移すことなく、関数型インターフェイス オブジェクト (関数、述語、コマンド、その他の単純なラムダ) を作成することをより慣用的にすることです。これはGuavaの範囲内ではないことに長い間気づきました。しかし、コマンドのようなインターフェイスは他の FP ライブラリで利用できるため、アナログが Guava に存在するかどうかを知りたかっただけです。

私のフレームワークを使用したより完全なコード例は、次のようになります。

0 投票する
3 に答える
560 参照

python - 理解できない Python の副作用

これを実行すると、最初の再帰で、Test印刷行が印刷行とは異なる値を生成することがわかりTest Hereます。なんで?このコードは の値にどのような影響を与える可能性がありgroupますか? テスト値が失敗した場合に備えて、変更groupされていないものを次の再帰レベルに渡そうとしていますが、再帰呼び出しを行う前に何らかの影響を受けているようです。上記はこれとどう違うのですか:group_movegroup

0 投票する
4 に答える
282 参照

c++ - C++ マクロの副作用

結果が 36 になる理由がわかりません。誰かがここで何が起こっているのか、プリプロセッサが何をするのか説明してもらえますか?

どうもありがとう:>

0 投票する
4 に答える
8339 参照

c++ - コンパイル時に一意の番号を生成する

ヘッダーのクラスごとに一意の番号を生成したいのですが、私の場合は素数ですが、これは連続した番号、つまり1、2、3、4などである必要があるとしましょう。

もちろん、これらをハードコーディングすることもできます。

実際にはクラスはそれほど小さくないため、これは非常にエラーが発生しやすく、IDの概要を完全に失いたくない場合は、途中で新しいクラスを追加する場合、次のすべての番号を変更する必要があります。

次のことができたらいいのにと思います。

ただし、constexpr関数の呼び出しには副作用がないため、これは不可能です。そのような結果をマクロで使うことも不可能だと思います。

私もそのようなもので幸運だろう:

しかし、正直なところ、それを実装する方法がわかりません。

目標を達成できますか?達成した場合、どのように達成できますか?

0 投票する
2 に答える
340 参照

android - Android Play/Marketの既存のアプリのフィルターと要件を変更した場合の副作用

それについての以前の質問はないので、ここで私は尋ねます。

バックグラウンド:

Playマーケットに、無料版と有料版の古いアプリがあります。私は新しいバージョンを作成し、根本的に変更し、別の支払いシステムを使用しました(無料アプリ+アプリ購入のみ、有料バージョンではありません:メンテナンスコストを削減します)。minSdkVersionまた、1.5から2.1に変更されました。

これらすべての違いのため、現在のアプリを更新するだけでなく、新しいアプリをアップロードすることにしました(つまり、API 7+に新しいapkを選択的に提供しない---複数のAPK)。これは、新しい支払いシステムのために特に重要です。古い有料の顧客にすべてを再度購入するように強制したくないからです。そのままにして幸せにしたいと思います(4.4 / 4.7レーティング)。要するに、私は人々を何かに「強制」したくありません。この場合、新しいアプリが提供する他のものに加えて、アプリ内購入を通じて同じものを再度購入することになります。

質問:

私の経歴をあなたに説明したので、それは明白な質問を提起します:

1. API 7以降のすべての顧客、つまりすでにアプリを購入した顧客に表示したまま、古いアプリをAPI7以降のオーディエンスから非表示にするにはどうすればよいですか。

ここでの私の最大の関心事は有料アプリです。6に設定された新しいバージョンmaxSdkVersion(SDK 2.0.1)をプッシュして、新しいAPI7以降の顧客を古いアプリに効果的にブロックすることを考えています。しかし、現在のAPI7以降のお客様が突然アプリにアクセスできなくなるのではないかと心配しています。それは2つの質問を提起します:

2.彼らはアプリを更新し続けることができますか?「はい」と推測するのは合理的ですか?

3.前の質問に対する答えが「はい」であったとしても、ユーザーがアプリをアンインストールしてから、(更新するだけでなく)マーケットで再度検索するとどうなるかは、私にはまだわかりません。その間にアプリのフィルター要件が変更されたことを考えると、それは消えますか、それとも彼の「購入した」アプリリストの下に表示されますか?

備考:テストアプリをアップロードして確認しますが、作成者が自分のアプリを購入することは許可されていないため(ライセンスの動作が異なる場合でも)、アンインストール-フィルター-インストールのシナリオをテストできませんでした。




#######回答への返信:#######

@スパーキー:

私はあなたがそれを間違えたと思います。私は複数のAPK、そしてもちろんドキュメントを回避する方法を知っています。ここで問題となるのはそれをはるかに超えています。

また、これは非推奨であることに注意maxSdkVersionしてください。これにより、新しいAPKを発行するときに、古いAPKに上限を設定するための提案に少しレンチがかかります。

ありがとうございました。私は逃しました。

複数のAPKは、よりシンプルなユーザーストーリーを提供します。

あなたがそう言うなら(私が引用しなかった他のことを除いて)、あなたはおそらくこの問題に頭を悩ませていなかったと思います。私に従ってください:

  1. 現在のProアプリバージョンを購入した有料の顧客はn人います。
  2. 彼らは、Proバージョンで持っている機能セットXを使用しています。
  3. 私は今、アプリ内購入を実装して、機能セットXYなどを提供することにしました...
  4. 残念ながら、これらの変更はアプリAPI7以降によって行われました。
  5. したがって、あなたがそう示唆するように、私は複数のAPKを提供することにしました。
  6. 現在、API 7以降の群衆は、私のアプリのこの新しいバージョンに突然更新されます。
  7. 新しいAPKに更新されるため、機能セットXが失われます。Xを再度購入する必要があります(アプリ内購入メニューから)。「光沢が少ない」方法ではありますが、私は彼らからすでに持っているものを取り出しました。それは私が言っているようなものです:

あなたは私にもう一度支払うか、あなたがすでに持っているものを失うかのどちらかです。

あなたは今問題を見ますか?私が新しいアプリを提供せざるを得ない理由がわかりますか?それとも私はまだあなたが言ったことを理解していませんか(私はそうではないと思います)?