Comment Ruby 1.9 poignée de caractères dans le code source?
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
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