問題タブ [coercion]
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.
ruby - 文字列の追加であることが明らかな場合、Ruby が "to_a" を使用して配列を強制的に文字列にする必要があるのはなぜですか?
例えば:
なぜRubyは配列を文字列に自動的に変換できないのですか?
perl - Perl:Moose属性と型強制の問題を修正
最近Mooseをv1.15にアップグレードしたところ、使用しているモジュールのセットが機能しなくなったことがわかりました。私が得るエラーは次のとおりです。
私はいくつかの考えられるエラーの原因を見ることができ、問題を解決する方法についてのアドバイスをいただければ幸いです。
GOBO::Nodeのコードの最初のビットは次のようになります。
このパッケージで使用されるロールには、GOBO :: Nodesの属性もあり、エラーメッセージに記載されている属性「source」もその1つです。
GOBO :: Nodeに強制がある理由の一部は、新しいノードを作成するときのショートカットのようです。強制するよりもBUILDARGSを使用する方が良いでしょうか?
複数のパッケージで強制を使用できるようにする場合は、どこに強制を配置する必要がありますか?(例)GOBO :: Attributedに強制を追加すると、すでに存在しているという警告が表示されます。ただし、強制がないと、上記のように強制できないという警告が表示されます。
サブタイプの個別のパッケージがあります。GOBO :: Nodeのサブタイプ(GOBO :: Node :: ProtoNodeなど)と強制を作成し、それを属性に使用してGOBO :: Nodesにする方がよいでしょうか?
この問題に関するヘルプやアドバイスをありがとうございます!
sql - SQLite3で文字列を数値として比較する
SQLiteで次のクエリがあります:
t1.field
数字を含むテキスト列はどこにありますか。SQLiteにt1.fieldの値を文字列ではなく数値と見なすように強制することは可能ですか(実行せずにALTER TABLE
)?現在、ソートは純粋な文字列であるため、10は2の前になります。
ありがとうございました。
flash - Flash エラー #1034: Flash 現像での実行時に型強制に失敗しました
SWC をコンパイルし、flashdevelop プロジェクトで使用しています。
プロジェクトをコンパイルするとすべて問題ありませんが、プロジェクトを実行/デバッグすると次のようになります。
次の行が障害の原因です。
LoginControlView はムービークリップ名です。loginControlView はアセット名です。loginControlView を拡張する loginControl というクラスがあります。
LoginControlView ムービークリップには、2 つのテキストボックスとボタン (fl.controls) が含まれています。
Flash IDE からコンパイル/実行/デバッグすると、プロジェクトは正常に実行されます。
助言がありますか?
perl - ムースの強制とビルダー
これは、Moose構造化タイプに関する以前の質問に続くものです。質問が長かったことをお詫び申し上げます。必要なすべての詳細が含まれていることを確認したかったのです。
MyApp::Type::Field
構造化タイプを定義します。私は強制を使用して、そのvalue
属性をクラスからより簡単に設定できるようにしますPerson
(以下の例を参照)。Fieldタイプが人の名前だけでなく使用される実際のアプリケーションでは、HashRefからも強制変換することに注意してください。
また、ビルド時にMyApp::Type::Field
size
からrequired
読み取り専用属性を設定する必要があります。MyApp::Person
これはビルダーメソッドを使用して実行できますが、強制が使用されている場合は呼び出されません。これは、強制がビルダーメソッドを使用せずに新しいオブジェクトを直接作成するためです。
around
メソッド修飾子をに追加することでこれを回避できますがMyApp::Person
(以下の例を参照)、これは厄介な感じがします。around
メソッド修飾子は頻繁に呼び出されますが、読み取り専用属性を設定する必要があるのは1回だけです。
強制を許可しながら、これを行うためのより良い方法はありますか?MyApp::Type::Field
クラスは、値がどうあるべきかを知る方法がないため、デフォルトまたはビルダーを介してsize
初期化することはできません。required
around
修飾語を持たないことを支持して、私が強制を放棄したのは単純な場合かもしれません。
MyApp::Type::Field
MyApp::Person
MyApp::Test
プリント:
around
メソッド修飾子をに追加しMyApp::Person
、ビルダーが設定されないように変更しsize
、required
:
がMyApp::Test
実行されるsize
と、 required
2回設定されます。
提案された解決策
MyApp::Person
各属性のサブタイプを作成し、そのサブタイプをaから作業に強制Str
するというdaotoadの提案はMyApp::Type::Field
非常にうまく機能します。ロット全体をforループでラップすることで、複数のサブタイプ、強制、および属性を作成することもできます。これは、同様のプロパティを持つ複数の属性を作成する場合に非常に便利です。
以下の例では、を使用して委任を設定したhandles
ので、これ$person->get_first_name
はに変換され$person->first_name->value
ます。ライターを追加すると、同等のセッターが提供され、クラスへのインターフェイスが非常にクリーンになります。
プリント:
module - モジュール シグネチャでのクラス インスタンス型強制
private_method
私のモジュールのいくつかには、2 つのメソッドで特定のクラス型を実装するグローバル クラス インスタンスが含まれていますpublic_method
。
プログラム内MyModule.my_instance # public_method
のどこからでも利用できるようにしたいのですが、 .MyModule.my_instance # private_method
MyModule
私は次のことを試みました:
ただし、これによりエラーが発生します。
値が一致しません:
val my_instance : private_type
には含まれません
val my_instance : public_type
強制を手動で書くことができます:
しかし、このような単純なもののためにコード サイズを 2 倍にしたくはありません。
なぜこれが起こるのか、どうすれば回避できるのかについて何か提案はありますか?
iphone - ARMとIntelでfloatをunsignedcharに強制変換する
Intelマシンで次のCコードを実行すると...
...出力は次のとおりです。
ただし、ARMデバイス(私の場合はiPad)で同じコードを実行すると、結果はまったく異なります。
ご想像のとおり、この種の違いは、クロスプラットフォームプロジェクトに恐ろしいバグをもたらす可能性があります。私の質問は次のとおりです。
floatをunsignedcharに強制変換すると、すべてのプラットフォームで同じ結果が得られると考えるのは間違っていましたか?
彼はコンパイラの問題でしょうか?
エレガントな回避策はありますか?
r - 因数を整数に変換する
reshapeパッケージを使用してデータフレームを操作しています。メルト関数を使用すると、値の列が因数分解されます。これは、これらの値のサブセットが、操作を実行できるようにしたい整数であるため、問題になります。
因子を整数に強制変換する方法を知っている人はいますか?を使用as.character()
すると正しい文字に変換されますが、すぐに操作を実行できないas.integer()
かas.numeric()
、システムがその係数を格納している数値に変換されます。これは役に立ちません。
ありがとうございました!
ジェフ
c - c の型強制: unsigned int から float へ
ホスト PC と組み込みプロセッサの間でシリアル通信を行っています。組み込み側では、浮動小数点データと整数データの文字列を解析する必要があります。私が現在行っていることは、これらの行に沿ったものです:
str には 4 つの文字があり、それぞれが float のバイトを表します。string 内のバイトはリトル エンディアンで並べられています。
例として、str から数値 100.0 を抽出しようとしています。string の内容は次のとおりであることを確認しました。
s[0]: 0x00、s[1]: 0x00、s[2]: 0x20、s[3]: 0x41、
これは、100.0 の 32 ビット浮動小数点表現です。さらに、関数が正常に temp を 0x41200000 に設定することを確認しました。ただし、dest は 0x4e824000 になります。問題が次の行から発生することはわかっています: *dest = (float32)temp という行で、temp から dest にビットを単純にコピーし、型キャストを使用してコンパイラを満足させることを望んでいました。
ただし、操作: float x = (float)4/3 は実際には 4 を 4.0 に変換するため、つまりビットを変更するため、これは当てはまらないことに気付きました。
temp のビットを dest に強制するにはどうすればよいですか?
前もって感謝します
編集:整数としての0x4120000は1092616192であり、浮動小数点数としては0x4e82400であることに注意してください
perl - Moose の深い強制 - ユーザー定義型の ArrayRef
次のサブタイプと強制チェーンで何が欠けていますか? 検証済みの型の配列参照を強制するか、次の入力から死ぬことができるようにしたいと思います。
- 強制文字列
- 有効な文字列
- 強制可能な文字列と有効な文字列が混在する配列参照
validate
すべての型が完全に名前空間化されており、宣言されていない関数とcoerce_str
検証 (bool を返す) と強制が行われ、入力から有効な文字列が返されると仮定します。
CustomType が機能することはわかっています。属性をそのまま定義し、強制可能な文字列または既に有効な文字列を使用してオブジェクトを初期化できるためです。どうすればよいかよくわかりませんが、渡された arrayref をコンストラクターから掘り下げて、含まれているすべての文字列を個別に検証することを明示的に処理することです。ディープ強制に関するドキュメント ( http://search.cpan.org/dist/Moose/lib/Moose/Manual/Types.pod#Deep_coercion ) を数回読んだことがありますが、よく理解できていません。誰かが私を正しい方向に向けることができることを願っています。ありがとう!
ここでは、より簡潔に概説するためにそれを切り詰めましたが、次のとおりです。
それをそのまま実行すると、以下が得られます。問題は検証ではありませんが、強制を明示的に定義していないため、何が欠けているのかわかりません。