Als ich zuvor keinen Edelstein installiert habe, habe ich nach der Ursache gesucht und bin zu dem folgenden Code gekommen, aber der bedingte Operator wurde zweimal in einer Zeile angezeigt und gefragt: "Unter welchen Bedingungen funktioniert das?" Ich habe es nicht verstanden, also mach dir eine Notiz.
idirs = idir ? Array === idir ? idir.dup : idir.split(File::PATH_SEPARATOR) : []
https://github.com/ruby/ruby/blob/master/lib/mkmf.rb#L1780
Es wird in der Reihenfolge von außen nach innen ausgewertet.
irb
> 1 == 1 ? 2 == 2 ? "a" : "b" : "c"
=> "a"
# 1 ==Da 1 wahr ist, ""a" : "b"" Wann: "c"Und ""a" : "b"」,Dann 2==Weil 2 wahr ist"a" : "b"Ist"a"
> 1 == 1 ? 2 == 0 ? 3 == 3 ? "a" : "b" : "c" : "d"
=> "c"
> 1 == 0 ? 2 == 0 ? 3 == 3 ? "a" : "b" : "c" : "d"
=> "d"
Ich konnte das Dokument nicht sofort finden und entschied mich für eine Syntaxanalyse. Ich habe mir auch Ripper angesehen, aber Parser war für Anfänger leicht zu erkennen.
console
% ruby-parse -e 'puts 1 == 1 ? 2 == 2 ? "a" : "b" : "c"'
(send nil :puts
(if
(send
(int 1) :==
(int 1))
(if
(send
(int 2) :==
(int 2))
(str "a")
(str "b"))
(str "c")))
Wenn man das analysierte Ergebnis betrachtet, scheint es, dass die innere "1 == 1" zuerst ausgewertet wird und das Ergebnis von "a": "b": "c" "a": "abhängt. b "` bleibt. Mit dem Ergebnis fahren wir mit der Auswertung von "1 == 1" fort, und "a" bleibt für das verbleibende "a": "b".
<a target = "_ blank" href = "https://www.amazon.co.jp/gp/product/B01IGW56CU/ref=as_li_tl?ie=UTF8&camp=247&creative=1211&creativeASIN=B01IGW56CU&linkCode=as2&2aa2de > Funktionsweise von Ruby Ruby unter dem Mikroskop