Question

En Ruby 1.8 et plus tôt,

Foo

est une constante (une Classe, un Module ou une autre constante).Alors que

foo

est une variable.La principale différence est la suivante:

module Foo
  bar = 7
  BAZ = 8
end

Foo::BAZ
# => 8

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

C'est bien beau, mais Ruby 1.9 permet UTF-8 code source.Donc, est "majuscules" ou "lowecase" autant qu'il est concerné?Ce sujet (sous-ensemble strict) ou Ɖfoo?

Est-il une règle générale?

Plus tard:

Ruby-core est déjà considérant que certains opérateurs mathématiques.Par exemple

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

permettrait

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

J'aimerais voir

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

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

my_infinite_range = (1..∞)

return 'foo' if x ≠ y

2.21 ≈ 2.2
Était-ce utile?

La solution 5

Je ne peux pas obtenir de la CISR pour accepter les caractères UTF-8, j'ai donc utilisé un script de test (/tmp/utf_test.rb).

"λ" fonctionne très bien comme un nom de variable:

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

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

"λ" fonctionne également comme un nom de méthode:

# 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

Il ne fonctionne pas comme une constante, et pourtant:

# 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)

Ni la version avec majuscules:

# 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)

Mon soupçon est que les noms des constantes doivent commencer avec un capital ASCII de la lettre (qui doit correspondre /^[A-Z]/).

Autres conseils

OK, ma blague réponse ne vont pas si bien.

Cette liste de diffusion question, à la réponse de Matz indique que Ruby 1.9 intégré String#upcase et String#downcase les méthodes de traite uniquement des caractères ASCII.

Sans le tester moi-même, je vois cela comme une preuve solide que tous les caractères non-ascii dans le code source sera susceptible d'être considérée comme minuscules.

Quelqu'un peut télécharger et compiler la dernière 1,9 et voir?

Je ne sais pas ce que ruby à faire si vous avez utilisé étendue des caractères UTF8 comme identifiants dans votre code source, mais je sais ce que je voudrais faire, ce qui serait une gifle à l'envers à l'arrière de la tête et de vous dire de NE PAS le FAIRE

J'aimerais voir

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

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

my_infinite_range = (1..∞)

return 'foo' if x ≠ y

2.21 ≈ 2.2

J'aimerais voir quelqu'un qui essaie de type de programme sur un clavier anglais :P

Dans Ruby 1.9.2-p0 (YARV) le résultat est le même que dans le post original (c'est à dire, Foo::bar #=> # NoMethodError:undefined method 'bar' pour les Foo:Module).Aussi, les lettres avec accent sont malheureusement pas considéré comme étant supérieur ni inférieur et méthodes liées à produire aucun résultat.

Exemples:

"á".upcase
=> "á"
"á" == "Á".downcase
=> false
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top