dieser meisten gut hier ...
Does "untyped" also mean "dynamically typed" in the academic CS world?
von mindestens zwei Personen beantwortet wurde, die mit der Materie vertraut sind. Für die meisten von uns, die Typsysteme usw. nicht auf dieser Ebene studiert haben, bedeutet "untypisiert" dynamische Typisierung, aber es ist in akademischen Kreisen eine falsche Bezeichnung, siehe Beitrag oben. untyped
bedeutet eigentlich, dass es keine Typen gibt, dh denke Assembly, Bash wird getippt, es ermittelt seine Typen zur Laufzeit. Lets nehmen Sie den folgenden Satz aus dem Advanced Bash Scripting Guide, Hervorhebung von mir ...
http://tldp.org/LDP/abs/html/untyped.html
Im Gegensatz zu vielen anderen Sprachen der Programmierung ist Bash nicht seine Variablen durch entmischen "Typ." Im Wesentlichen sind Bash-Variablen Zeichen Zeichenketten, aber je nach Kontext erlaubt Bash arithmetische Operationen und Vergleiche auf Variablen. Der entscheidende Faktor ist, ob der Wert einer Variablen nur Ziffern enthält.
Bash findet heraus, dass etwas zur Laufzeit eine Zahl ist, dh es wird dynamisch typisiert. In Assembler auf einer 64-Bit-Maschine kann ich alle 8 Bytes in einem Register speichern und dekrementieren, es überprüft nicht, ob die Dinge Zeichen usw. waren, gibt es keine context
über die Sache, die es dekrementieren wird dekrementiert nur die 64 Bits, es überprüft oder berechnet nichts über die Art der Sache, die es dekrementiert.
Perl ist keine untypisierten Sprache, aber der folgende Code könnte es, wie es alles behandelt machen scheinen, als ganze Zahlen, dh
#!/usr/bin/perl
use strict;
use warnings;
my $foo = "1";
my $bar = $foo + 1;
print("$bar\n");
$ foo String, sondern wurde erhöht zugewiesen wurde? Bedeutet das, dass Perl nicht typisiert ist, weil es basierend auf dem Kontext das tut, was Sie wollen? Ich denke nicht.
Dieses von Python unterscheidet, Python werden Sie tatsächlich den folgenden Fehler geben, wenn Sie die gleiche Sache versuchen ...
Traceback (most recent call last):
File "py.py", line 2, in <module>
bar = foo + 1
Wenn Python dynamisch typisiert ist und Perl wird getippt dynamisch warum sehen wir ein anderes Verhalten. Liegt es daran, dass sich ihre Typsysteme unterscheiden oder ihre Typumwandlungssemantik sich unterscheidet? Gibt es in Assembly Anweisungen zur Typkonvertierung, die eine Zeichenfolge in eine Ganzzahl ändern oder umgekehrt?
Bash hat verschiedene Arten Konvertierungsregeln
#!/bin/bash
set -e
MYVAR=WTF
let "MYVAR+=1"
echo "MYVAR == $MYVAR";
Dies wird 1
zuweisen, anstatt myvar es also zu inkrementieren, wenn Sie eine Zeichenfolge bash erhöhen legt die Zeichenfolge auf ganzzahlige Null dann die Schrittweite der Fall ist. Es führt eine Typumwandlung durch, was bedeutet, dass es getippt ist.
Für alle glauben immer noch, dass Bash nicht typisiert ist dies versuchen ....
#!/bin/bash
declare -i var1=1
var1=2367.1
Sie sollten etwas wie diese erhalten ...
foo.sh: line 3: 2367.1: syntax error: invalid arithmetic operator (error token is ".1")
Aber die folgenden zeigt keine solche Fehler
Der Ausgang der folgenden
#!/bin/bash
var1=2367.1
echo "$var1"
let "var1+=1"
echo "$var1"
ist die gleiche Warnung, ohne eine Art erklärt ...
2367.1
foo.sh: line 4: let: 2367.1: syntax error: invalid arithmetic operator (error token is ".1")
2367.1
Ein viel besseres Beispiel dieser
#!/bin/bash
arg1=1234
arg2=abc
if [ $arg1 -eq $arg2 ]; then
echo "wtf";
fi
ist, warum ich dies zu tun bekommen ...
foo.sh: line 5: [: abc: integer expression expected
Bash fragt mich nach einem ganzzahligen Ausdruck.
Das ist eigentlich eine wirklich interessante Frage, bitte nicht schließen Ich habe daraus gelernt, auch nachdem ich die anderen Antworten gelesen habe. – Harry
Es ist ein wenig unklar, ob 'declare -i' tatsächlich irgendeine Vorstellung von Typ liefert, schon allein deshalb, weil es so wenige Orte gibt, an denen eine Unterscheidung gemacht werden könnte. Die Zuweisung zu einer Variablen mit ihrer ganzzahligen Attributmenge ist betroffen, aber nirgendwo anders ist die * Verwendung * einer solchen Variablen von einer Variablen ohne die Attributmenge unterscheidbar. – chepner