Come si fa a Ruby 1.9 gestire carattere casi in codice sorgente?
Domanda
In Ruby 1.8 e precedenti,
Foo
è una costante (una Classe, un Modulo o un'altra costante).Considerando che
foo
è una variabile.La differenza chiave è come segue:
module Foo
bar = 7
BAZ = 8
end
Foo::BAZ
# => 8
Foo::bar
# NoMethodError: undefined method 'bar' for Foo:Module
Questo è tutto bene e buono, ma Ruby 1.9 permette UTF-8 codice sorgente.Così è ℃
"maiuscolo" o "lowecase", per quanto riguarda?Che dire ⊂
(sottoinsieme) o Ɖfoo
?
C'è una regola generale?
Poi:
Ruby-core è già valutando alcuni operatori matematici.Per esempio
module Kernel
def √(num)
...
end
def ∑(*args)
...
end
end
consentirebbe
x = √2
y = ∑(1, 45, ...)
Mi piacerebbe vedere
my_proc = λ { |...| ... }
x ∈ my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..∞)
return 'foo' if x ≠ y
2.21 ≈ 2.2
Soluzione 5
Non riesco IRB di accettare caratteri UTF-8, quindi ho usato uno script di test (/tmp/utf_test.rb
).
"λ" funziona bene come un nome di variabile:
# encoding: UTF-8
λ = 'foo'
puts λ
# from the command line:
> ruby -KU /tmp/utf_test.rb
foo
"λ" funziona bene come un nome di metodo:
# 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
Non funziona come una costante, anche se:
# 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)
Né la versione in maiuscolo:
# 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)
Il mio sospetto è che i nomi delle costanti deve iniziare con un capitale ASCII della lettera (deve corrispondere /^[A-Z]/
).
Altri suggerimenti
OK, il mio scherzando rispondi non andò così bene.
Questa è la mailing list domanda, con risposta da Matz indica che Ruby 1.9 integrata String#upcase
e String#downcase
i metodi per gestire solo caratteri ASCII.
Senza provarla io, vorrei vedere questo come una forte evidenza che tutti i caratteri non ascii nel codice sorgente sarà probabilmente considerato minuscole.
Qualcuno può scaricare e compilare l'ultima 1.9 e vedere?
Non so cosa ruby avrebbe fatto se si è utilizzato esteso di caratteri UTF8 come identificatori nel codice sorgente, ma so cosa vorrei fare, che sarebbe uno schiaffo è a testa in tuffo di testa e ti dicono di NON FARLO
Mi piacerebbe vedere
my_proc = λ { |...| ... }
x ∈ my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..∞)
return 'foo' if x ≠ y
2.21 ≈ 2.2
Mi piacerebbe vedere qualcuno che cerca per tipo di programma su una tastiera inglese :P
In Ruby 1.9.2-p0 (YARV) il risultato è lo stesso come nel post originale (cioè, Foo::bar #=> # NoMethodError:undefined method 'bar' di Pippo:Module).Inoltre, le lettere con l'accento, purtroppo, non sono considerato come essere superiore né inferiore e relativi metodi di produrre alcun risultato.
Esempi:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false