Frage

In Ruby 1.8 und früher:

Foo

ist eine Konstante (eine Klasse, ein Modul oder eine andere Konstante).Wohingegen

foo

ist eine Variable.Der wesentliche Unterschied ist wie folgt:

module Foo
  bar = 7
  BAZ = 8
end

Foo::BAZ
# => 8

Foo::bar
# NoMethodError: undefined method 'bar' for Foo:Module

Das ist alles schön und gut, aber Ruby 1.9 ermöglicht UTF-8-Quellcode.So ist es auch „Großbuchstaben“ oder „Kleinbuchstaben“ in dieser Hinsicht?Wie wäre es mit (strikte Teilmenge) oder Ɖfoo?

Gibt es eine allgemeine Regel?

Später:

Ruby-core erwägt bereits einige der mathematischen Operatoren.Zum Beispiel

module Kernel
  def √(num)
    ...
  end
  def ∑(*args)
    ...
  end
end

würde erlauben

x = √2
y = ∑(1, 45, ...)

Ich würde es gerne sehen

my_proc = λ { |...| ... }

x ∈ my_enumerable  # same as my_enumerable.include?(x)

my_infinite_range = (1..∞)

return 'foo' if x ≠ y

2.21 ≈ 2.2
War es hilfreich?

Lösung 5

Ich kann IRB nicht dazu bringen, UTF-8-Zeichen zu akzeptieren, also habe ich ein Testskript verwendet (/tmp/utf_test.rb).

„λ“ funktioniert gut als Variablenname:

# encoding: UTF-8
λ = 'foo'
puts λ

# from the command line:
> ruby -KU /tmp/utf_test.rb
foo

„λ“ funktioniert auch gut als Methodenname:

# encoding: UTF-8
Kernel.class_eval do
  alias_method :λ, :lambda
end

(λ { puts 'hi' }).call

# from the command line:
> ruby -KU /tmp/utf_test.rb:
hi

Es funktioniert jedoch nicht als Konstante:

# encoding: UTF-8
Object.const_set :λ, 'bar'

# from the command line:
> ruby -KU /tmp/utf_test.rb:
utf_test.rb:2:in `const_set': wrong constant name λ (NameError)

Auch die großgeschriebene Version gilt nicht:

# encoding: UTF-8
Object.const_set :Λ, 'bar'

# from the command line:
> ruby -KU /tmp/utf_test.rb:
utf_test.rb:2:in `const_set': wrong constant name Λ (NameError)

Mein Verdacht ist, dass Konstantennamen mit einem großen ASCII-Buchstaben beginnen müssen (müssen übereinstimmen). /^[A-Z]/).

Andere Tipps

OK, meine scherzhafte Antwort kam nicht so gut an.

Diese Mailinglistenfrage mit Antwort von Matz zeigt an, dass Ruby 1.9 integriert ist String#upcase Und String#downcase Methoden verarbeiten nur ASCII-Zeichen.

Ohne es selbst zu testen, würde ich dies als starken Beweis dafür sehen, dass alle Nicht-ASCII-Zeichen im Quellcode wahrscheinlich als Kleinbuchstaben betrachtet werden.

Kann jemand die neueste Version 1.9 herunterladen, kompilieren und sehen?

Ich weiß nicht, was Ruby tun würde, wenn Sie erweiterte UTF8-Zeichen als Bezeichner in Ihrem Quellcode verwenden würden, aber ich weiß, was ich tun würde, nämlich Ihnen eine Ohrfeige zu geben und Ihnen zu sagen, TUN SIE DAS NICHT

Ich würde es gerne sehen

my_proc = λ { |...| ... }

x ∈ my_enumerable  # same as my_enumerable.include?(x)

my_infinite_range = (1..∞)

return 'foo' if x ≠ y

2.21 ≈ 2.2

Ich würde gerne jemanden sehen, der versucht, dieses Programm auf einer englischen Tastatur einzugeben :P

In Ruby 1.9.2-p0 (YARV) Das Ergebnis ist das gleiche wie im ursprünglichen Beitrag (d. h. Foo::bar #=> # NoMethodError:undefinierte Methode 'bar' für Foo:Module).Außerdem werden Buchstaben mit Akzent leider weder als Groß- noch als Kleinbuchstaben betrachtet und verwandte Methoden führen zu keinem Ergebnis.

Beispiele:

"á".upcase
=> "á"
"á" == "Á".downcase
=> false
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top