web-dev-qa-db-ja.com

JavaScriptとLuaの微妙な違い

JavaScriptが大好きです。それはとてもエレガントです(バックグラウンドで恋をしたファンボーイのため息が静かな音を想像してください)。

だから、最近、私は löve2d フレームワークを介してLuaで遊んだ(いいね!)-そしてLuaも素晴らしいと思う。私の見たところ、これらの2つの言語はとても似ています。

明らかな違いがあります

  • 構文
  • 問題領域
  • 図書館
  • タイプ(ビット)

しかし、より微妙なものはどれですか? JavaScriptコーダーがLuaでわずかに異なる動作をするのに当たり前のことと思っているものはありますか?ある言語の経験豊富なコーダーが他の言語を試してみても明らかではないかもしれない落とし穴はありますか?

例:Luaでは、配列とハッシュは分離されていません(テーブルのみがあります)-JavaScriptでは、数値配列とハッシュオブジェクトです。さて、これは明らかな違いの1つです。

しかし、変数スコープ、不変性、またはこのようなものに違いはありますか?

120
stefs

少なくとも一度はあなたを見つけるいくつかの微妙な違い:

  • 「等しくない」は、Luaでは_~=_と綴られます。 JSでは_!=_
  • Lua 配列は1から始まります -最初のインデックスは0ではなく1です。
  • Luaでは、オブジェクトメソッドを呼び出すためにピリオドではなくコロンが必要です。 a:foo()の代わりにa.foo()と書く 

 必要に応じてピリオドを使用できますが、self変数を明示的に渡す必要があります。 a.foo(a)は少し面倒に見えます。詳細については、 Luaでのプログラミング を参照してください。

12
richq

正直に言うと、違いをリストするよりもJavascriptとLuaに共通するものをリストする方が簡単です。どちらも動的に型指定されたスクリプト言語ですが、実際に実行できる範囲内です。完全に異なる構文、異なる元の設計目標、異なる動作モード(Luaは常にバイトコードにコンパイルされてLua VM上で実行され、Javascriptは異なります)があり、リストは延々と続きます。

11
DaveR

JavaScriptの配列とオブジェクトは、思っているよりも近いです。配列表記を使用して、いずれかの要素を取得できます。また、配列に非数値インデックスを追加できます。個々の配列要素は何でも保持でき、配列はまばらになります。彼らはほぼ同一のいとこです。

7
Nosredna

私はこの質問と提供された回答が気に入りました。 2つの言語が私よりも似ているように見える追加の理由:

どちらも関数を変数に割り当て、その場で関数を構築し、クロージャーを定義できます。

3
WeakPointer

頭の上から

ルア...

  1. コルーチン をサポート
  2. テーブルのキーとして文字列/数字だけに制限はありません。すべてが機能します。
  3. エラー処理はやや不器用です。何も処理しないか、 pcall メソッドを使用します
  4. 字句の範囲の違いについて読んだことと、Luaのほうが優れていると思います。
  5. Luaでの正規表現のサポートが制限されていることを正しく思い出せば
3
jitter

テストにより、現在のJavascriptもオブジェクト、または少なくともluaのような論理式からの文字列を返すことが明らかになりました。

function nix(){
    alert(arguments[0]||"0");
} 
nix();
1
Adder

LuaとJavaScriptはどちらもプロトタイプの基本言語です。

0
Anonymous