Mudlet: 0インデックス関数を1インデックスで補完します

作成日 2020年04月16日  ·  8コメント  ·  ソース: Mudlet/Mudlet

問題の簡単な要約/要求された機能の説明:

TLuaInterpreter.cppには、初期の設計からいくつかの関数があり、インデックスは0から始まります。これは、慣用的なLuaや直感的ではありません。 https://wiki.mudlet.org/w/Manual:Mapper_Functions#getExitStubs1のように、1インデックスの補数を追加する必要があります。

問題を再現する手順/機能を追加する理由:

より直感的なAPI。

エラー出力/機能の期待される結果

0から始まるインデックス付きテーブルを返す関数には、1からインデックスを開始する補完関数も必要です。

マドレットのバージョン、オペレーティングシステム、解決/実装方法のアイデアなどの追加情報:

4.6.2

enhancement help wanted

最も参考になるコメント

さて、最終的にはgetLuaApiVersion()番号があり、 1.xyの形式のバージョン番号文字列を返すことを発表し、バージョン2に移行すると、すべての壊れた/機能しなくなった関数が修正/削除され、残りはすべて完全に均一な引数処理と戻り値になります(実行時の問題ごとにnil +エラーメッセージを含む)。

もちろん、下位互換性を壊す機会が提供されるので、パッケージとスクリプトがそのような重大な変更から身を守ることができるように、できるだけ早くLuaAPIに組み込む必要があります。

(float) mudlet::mMudletXmlDefaultFormatを2.0以上の値に変更すると同時にこれを行うことを検討することもできます。これは、そのような番号を持つXML保存ファイルまたはパッケージがMudletによって完全に(設計上)拒否されるため適切です。 3.0.1以降のバージョンで、次のプロンプトが表示されます。

[ ALERT ] - Sorry, the file being read:
            XXXXX.xml
            reports it has a version (2.0.0) it must have come from a later Mudlet version,
            and this one cannot read it, you need a newer Mudlet!

言うまでもなく、このような変更は大規模であり、メジャーマドレットバージョンのリリースにも準拠する必要がありますが、早くてもマドレット6.0より前になるとは思いません。 OTOHその後、Luaの新しいバージョンに切り替えることができます。

全てのコメント8件

getExitStubs1とgetExitStubs0の両方を追加して、公正な警告を出し、ある時点でgetExitStubsを期待どおりに機能させるのはどうですか? そうすれば、Mudletは最終的にはより慣用的で直感的になる可能性があります。

私はあなたが言っていることを理解します、しかしそれは比較的些細な問題を話しているもののための既存のスクリプトを壊します、良いトレードオフではありません。 誰かが数年前のフォーラムからコードを拾い上げて、それをドロップして、それを機能させることができるのは素晴らしいことです。

そこに出されているすべてのコードに魔法のように影響を与えることができれば... :)

rust-langのfixコマンドのようなものを覚えています...(またはgolang fixでした)それは魔法のように物事を修正します。

--the following possible functions have 0-indexed
function getRoomsByPosition()
function getExitStubs() --Obviously..
function getAreaRooms()

編集:
適切な1インデックスの応答を返すために変更する必要があるのは、これらの関数だけのように見えます。

さて、最終的にはgetLuaApiVersion()番号があり、 1.xyの形式のバージョン番号文字列を返すことを発表し、バージョン2に移行すると、すべての壊れた/機能しなくなった関数が修正/削除され、残りはすべて完全に均一な引数処理と戻り値になります(実行時の問題ごとにnil +エラーメッセージを含む)。

もちろん、下位互換性を壊す機会が提供されるので、パッケージとスクリプトがそのような重大な変更から身を守ることができるように、できるだけ早くLuaAPIに組み込む必要があります。

(float) mudlet::mMudletXmlDefaultFormatを2.0以上の値に変更すると同時にこれを行うことを検討することもできます。これは、そのような番号を持つXML保存ファイルまたはパッケージがMudletによって完全に(設計上)拒否されるため適切です。 3.0.1以降のバージョンで、次のプロンプトが表示されます。

[ ALERT ] - Sorry, the file being read:
            XXXXX.xml
            reports it has a version (2.0.0) it must have come from a later Mudlet version,
            and this one cannot read it, you need a newer Mudlet!

言うまでもなく、このような変更は大規模であり、メジャーマドレットバージョンのリリースにも準拠する必要がありますが、早くてもマドレット6.0より前になるとは思いません。 OTOHその後、Luaの新しいバージョンに切り替えることができます。

table [0]とtable [#table]を同じ参照にするという方針に沿って解決することは可能ですか? では、table [0]とipairsを使用したコードは問題なく機能しますか?
for i=0, #table doを使用するコードで重複イベントが発生するため、修正ではないと思います
巧妙な回避策がある問題のようです。

metatable _indexを使用する方法はありますか? 私はメタテーブルを完全には理解していません。

このページは役に立ちましたか?
0 / 5 - 0 評価