ここに私が直面している問題があります:
次の行で Wax に NSDecimalNumber を作成します
local x=NSDecimalNumber:initWithString("2.3")
これから、次の行で NSDecimal を作成したいと思います
local y=x:decimalValue()
これにより、プログラムが即座にクラッシュします。
同じエクスペリエンスを作成するには、基本的なワックス プロジェクトを作成し、AppDelegate.luaの関数 applicationDidFinishLaunchingの lat 行として 2 行を追加する必要があります。
質問: 渡すことができる正直な NSDecimal を返すにはどうすればよいですか? 実際に自分で番号を表示または印刷する必要はありません。
付録
- インターネット上で広く信じられていることですが、NSDecimal は NSDecimalNumber とは大きく異なります。1 つ目は C 構造体で、2 つ目は Obj-C 構造体で、私は非常によく使用しています。
- NSDecimalNumber を機能させるには、wax-helpers.m の 222 ~ 224 行 (NSNumber) と 241 ~ 246 行 (NSValue) をコメントアウトする必要があります。
- NSDecimal は Foundation/NSNumber.h で定義されています
実行時の出力: スタック トレースはほとんどなく、静かに終了します。デバッガー (ブレークポイントがオンになっている) には、次の (省略された) 呼び出しシーケンスがあります。
#0 0x027553f4 in objc_exception_throw
#1 0x0256e8d6 in __NSGetSizeAndAlignment
#2 0x0256ebd9 in __NSGetSizeAndAlignment
#3 0x025747b8 in __NSMS1
#4 0x02573f9c in +[NSMethodSignature signatureWithObjCTypes:]
#5 0x000342d0 in wax_selectorForInstance at wax_helpers.m:557
#6 0x00035bc2 in __index at wax_instance.m:303
#7 0x000181b9 in luaD_precall at ldo.c:319
#8 0x00018405 in luaD_call at ldo.c:376
#9 0x0002c488 in callTMres at lvm.c:88
#10 0x0002c74a in luaV_gettable at lvm.c:125
#11 0x0002dd26 in luaV_execute at lvm.c:467
#12 0x0001841c in luaD_call at ldo.c:377
#13 0x0000ddc8 in f_call at lapi.c:800
#14 0x0001758a in luaD_rawrunprotected at ldo.c:116
#15 0x0001879a in luaD_pcall at ldo.c:463
#16 0x0000de65 in lua_pcall at lapi.c:821
#17 0x00034e60 in wax_pcall at wax_helpers.m:826
#18 0x00036be4 in pcallUserdata at wax_instance.m:580
#19 0x00036edc in wax_id_call at wax_instance.m:627
時々、次の小さなスタック トレースがあります。
wTest[36403:207] PANIC:
Error
-----
Error calling 'applicationDidFinishLaunching:' on lua object '<AppDelegate: 0x6300e50>'
data/scripts/AppDelegate.lua:39: attempt to index local 'x' (a number value)
stack traceback:
[C]: ?
data/scripts/AppDelegate.lua:39: in function <data/scripts/AppDelegate.lua:19>
これは、デバッガーが提供するものと一致します: Wax は、数値のメソッドを呼び出そうとしています。