問題タブ [mutable]
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.
oop - 基本的なF#の質問:可変性、キャピタライゼーション標準、関数とメソッド
これらがすでに尋ねられている場合は、他の答えを私に指摘してください!
今月、新しいリリースでF#を開始します。私はOOと関数型言語(HaskellとSchemeですが、OCaml / MLではありません)の両方のバックグラウンドを持っています。F#CTPに付属している小さなチュートリアルを読むことから、これまでにいくつかの質問が発生しました。
1)可変変数はモナドよりも優先されますか?もしそうなら、モナドはF#で完全に避けられていますか?
2)使用されているキャピタライゼーションに少し混乱しています。このチュートリアルコードファイルでは、関数が小文字で始まる場合と大文字で始まる場合があります。MSは関数とメソッドの初期キャップを好む傾向があることは知っていますが、ここでは2つの方法があるようです。自分の時間で遊んでいるだけなので、大したことではありませんが、標準が何であるか興味があります。
3)OOと機能的なスタイルのこの全体の組み合わせについて私はかなり混乱しています。print_string "string"
理にかなっていますが、ここにありますList.map fn list
(Listが単なる名前空間でない限り、許してください)。次に、ここにありstr.Length
ます。いつ何を使うのか、そしてどれが好ましいのかを解明したいと思う人はいますか?
ありがとう!
f# - 複数の値を返し、可変変数に割り当てるにはどうすればよいでしょうか?
これは私がこれまでに持っているものです。
c# - 一部のプロパティが高価なオブジェクトのC#デザイン:変更可能にする言い訳?
はい、私は知っています、可変オブジェクトについてのさらに別の質問。一般的な背景についてはこれを、私の質問に最も近い類似物についてはこれを参照してください。(ただし、ここでは適用されないC ++固有の倍音がいくつかあります)
次の擬似コードが最良のインターフェース設計を表していると仮定しましょう。つまり、これはビジネスセマンティクス(現在の状態)をOOタイプに最も明確に表現したものです。当然のことながら、UglyDataとそれを使用して実行するタスクは、段階的に変更される可能性があります。
ここでの最良のルートは何ですか?私が見ることができるオプション:
- 上記のように、明示的なCalculate()メソッドを使用した可変オブジェクト
- 高価な計算がゲッターで行われる(そしておそらくキャッシュされる)可変オブジェクト
- 一方が他方から継承する(またはおそらく構成する?)2つのオブジェクトに分割します
- 上にリンクされたC++の質問のように、ある種の静的+ロックメカニズム
私は自分自身で#2に傾いています。しかし、すべてのルートには潜在的な落とし穴があります。
#1または#2を選択した場合、可変性に対するConsumer2のループを明確で正しい方法でどのように実装しますか?
#1または#3を選択した場合、一部のプロパティのみを計算し、他のプロパティは計算したくない将来の状況をどのように処理しますか?N個のヘルパーメソッド/派生クラスを作成しますか?
#4を選んだら、あなたは頭がおかしいと思いますが、気軽に説明してください
multithreading - Clojure 可変ストレージ タイプ
サイトで入手できる API とドキュメントから Clojure を学ぼうとしています。Clojure の変更可能なストレージについては少しよくわかりません。私の理解が正しいことを確認したいと思います。私が間違っているという考えがあれば教えてください。
編集:その正確性についてコメントを受け取ったので、これを更新しています。
免責事項: この情報はすべて非公式であり、間違っている可能性があります。Clojure の仕組みを理解するためにこの記事を使用しないでください。
Varsには常にルート バインディングが含まれ、場合によってはスレッドごとのバインディングも含まれます。これらは命令型言語の通常の変数に相当し、スレッド間で情報を共有するのには適していません。(アーサー・ウルフェルトに感謝)
参照は、単一のトランザクションで任意の数の参照の状態を変更できるアトミック トランザクションをサポートするスレッド間で共有される場所です。トランザクションは同期式 (dosync) の終了時にコミットされ、競合は STM マジック (ロールバック、キュー、待機など) で自動的に解決されます。
エージェントは、独立したアクション関数をディスパッチしてエージェントの状態を変更することにより、最小限のオーバーヘッドでスレッド間で情報を非同期的に共有できるようにする場所です。エージェントはすぐに返されるため、非ブロッキングですが、ディスパッチされた関数が完了するまでエージェントの値は設定されません。
アトムは、スレッド間で同期的に共有できる場所です。異なるスレッド間の安全な操作をサポートします。
これらの構造をいつ使用するかに基づいた私のわかりやすい要約は次のとおりです。
- Var は、命令型言語の通常の古い変数のようなものです。(可能な限り避けてください)
- Atom は Var に似ていますが、即時の読み取りと安全な設定を可能にするスレッド共有の安全性を備えています。(ありがとうマーティン)
- エージェントは Atom に似ていますが、ブロックするのではなく、新しいスレッドを生成してその値を計算し、値の変更中にのみブロックし、割り当てが完了したことを他のスレッドに知らせることができます。
- Ref は、トランザクションで自分自身をロックする共有の場所です。ロックされたコードのすべての部分について競合状態で何が起こるかをプログラマーに決定させる代わりに、トランザクションを開始し、Clojure にそのトランザクション内の参照間のすべてのロック状態を処理させます。
また、関連する概念として function がありますfuture
。私には、将来のオブジェクトは、計算が完了するまで値にまったくアクセスできない同期エージェントとして記述できるように思えます。ノンブロッキング Atom と表現することもできます。これらは正確な未来の概念ですか?
java - Hibernate におけるエンティティのコレクションの落とし穴
OK、これはこれのフォローアップの質問です。私は今本当に混乱しているので.
エンティティ間に 1 対多または多対多の関連付けがPerson
あり、JavaEvent
のクラスに. ( Event に単一またはが含まれているかどうかは無視しましょう。)Person
Set<Event>
Person
Set<Person>
Event
s はデータベースに格納されたエンティティであるため、イベント フィールドを変更できます。Event
可変性を処理し、Java Set<> ID チェックを混乱させない正しい方法は何ですか? この場合、hashCode()
および/またはオーバーライドすることは決してありませんか? equals()
(例: ID = オブジェクト参照 ID に基づく)
を順序付けたい場合Event
(イベントの開始時間など)、フィールドの変更をどのように管理すればよいEvent
ですか? 変更がそこに反映されると、データベースは問題なく処理しますが、Java 側では、コレクション内のイベントを変更するには、それを削除して変更し、再挿入する必要があるということですか? それとも、Hibernate マッピングの Java 側でソートされた順序を維持する実際の方法はありませんか? (したがって、順序付けされていないものとして処理する必要があるため、並べ替えられたEvent
s のリストを取得するときはいつでも Java で並べ替えを処理する必要がありますか?)
編集:うーん、equals/hashCode に関するこれらの議論を見つけました:
f# - ディクショナリ エントリの値をミュータブルとしてどのように宣言しますか?
Google は、F# ディクショナリ (またはその他のコレクション) にエントリを追加および削除する例を数多く提供しています。しかし、私は同等の例を見ません
私はもう試した
また、辞書を次のように宣言しようとしました
これにはいくつかのバリエーションがあります。しかし、私はまだ正しい組み合わせを見つけていません...実際にF#で可能であれば.
編集:問題のあるコードは次のとおりです。
私が得ているエラーは次のとおりです。
java - ロックオブジェクトの変更
(できるだけ詳細に)知りたいのですが、オブジェクトをロックとして使用しているときにオブジェクトを変更するのはなぜ悪い習慣なのですか。
乾杯
python - Python オブジェクトの初期化のバグ。それとも、オブジェクトの仕組みを誤解していますか?
これにより、とオブジェクトone._resources
の両方に割り当てられたオブジェクトへの参照が出力されます。オブジェクトの作成時に定義されていない場合は、明らかにそのように設定されているため、空の配列になると思います。コメントを外しても同じことが起こります。を使用しても同じことができます。one
two
two
myobj.__init__(self, resources)
super(ext, self).__init__(resources)
それを機能させる唯一の方法は、次を使用する場合です。
これを機能させるために、オブジェクトを作成するときにデフォルト値を手動で設定する必要はありません。または多分私はそうします。何かご意見は?
Python 2.5および2.6を使用してこれを試しました。