1

すべての動的言語はダックタイピングをサポートしていますか?

PHPはダックタイピングをサポートしていると思います。そうですか?

4

3 に答える 3

5

動的に型付けされる oop 言語は、php を含め、ダックタイピングをサポートしています。

これは機能ではなく、むしろプログラミング スタイルです。

于 2011-04-09T14:09:23.213 に答える
3

静的型付けとは、一度変数を定義すると、その変数はその存続期間中同じ型のままであることを意味します。通常、静的言語では型を宣言する必要がありますが、型推論を持つものもあります。それらは、定義から型を推論します。たとえば、scala では、次のように記述できます。コンパイラは の型を bei = 1と推測しますが、 を宣言することはできません。これはエラーをスローします。iinti = "1"

動的型付けとは、変数の型を宣言する必要がなく、変数の型を変更できることを意味します。ruby ではそのままでi = 1問題i = "1"ありません。

ダックタイピングは、オブジェクト指向言語にほぼ独占的に適用される別の概念です。Duck 型付けを使用する言語では、メソッドへの引数の型がチェックされないため、メソッドが受け取った呼び出しに応答する限り、メソッドに渡す型はどれでも受け入れられます。

たとえば、次のようになります。

class Duck
  def quacks
    puts "Quack"
  end
end

class FauxDuck
  def quacks
    puts "FauxQuack"
  end
end

def quacker duck
  duck.quacks
end

メソッド quacker は、Duck または FauxDuck のいずれかを取ります。.quacks

ほとんどのオブジェクト指向の動的型付け言語もダック型付けされていますが、必須ではありません。メソッド呼び出しに型を宣言してそれらを強制する言語を使用することもできますが、それでも動的に型付けされます。動的型付けとは、定義した後でオブジェクトの型を変更できることを意味するだけです。

架空の非ダック型ルビー

class Duck
  def quacks
    puts "Quack"
  end
end

class FauxDuck
  def quacks
    puts "FauxQuack"
  end
end

def quacker Duck duck
  duck.quacks
end

duck = Duck.new
quacker.duck ## no error
duck = FauxDuck.new ##redefining the type of the variable
quacker.duck ## throws an error at runtime

なぜこれをしたいのか、私にはわかりませんが、言語設計者が利用できる選択肢です。

于 2015-02-06T00:00:34.260 に答える
-3

はい、PHP はダックタイプの言語です。

$x = 1;
$x = 'string';
$x = new Person;
$x = 1 / 2;
于 2011-04-09T13:50:10.410 に答える