Pregunta

En Ruby 1.8 y versiones anteriores,

Foo

es una constante (una clase, un módulo u otra constante).Mientras

foo

es una variable.La diferencia clave es la siguiente:

module Foo
  bar = 7
  BAZ = 8
end

Foo::BAZ
# => 8

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

Eso está muy bien, pero Ruby 1.9 permite código fuente UTF-8.Asi es ¿"mayúsculas" o "minúsculas" en lo que a esto respecta?Qué pasa (subconjunto estricto) o Ɖfoo?

¿Existe una regla general?

Más tarde:

Ruby-core ya está considerando algunos de los operadores matemáticos.Por ejemplo

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

permitiría

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

Me encantaría ver

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

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

my_infinite_range = (1..∞)

return 'foo' if x ≠ y

2.21 ≈ 2.2
¿Fue útil?

Solución 5

No puedo hacer que IRB acepte caracteres UTF-8, así que utilicé un script de prueba (/tmp/utf_test.rb).

"λ" funciona bien como nombre de variable:

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

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

"λ" también funciona bien como nombre de método:

# 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

Sin embargo, no funciona como una constante:

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

Tampoco la versión en mayúscula:

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

Mi sospecha es que los nombres constantes deben comenzar con una letra ASCII mayúscula (debe coincidir /^[A-Z]/).

Otros consejos

Vale, mi respuesta en broma no fue tan bien recibida.

Esta pregunta de la lista de correo, con respuesta de Matz indica que Ruby 1.9 está integrado String#upcase y String#downcase Los métodos solo manejarán caracteres ASCII.

Sin probarlo yo mismo, vería esto como una fuerte evidencia de que todos los caracteres que no sean ASCII en el código fuente probablemente se considerarán minúsculos.

¿Alguien puede descargar y compilar la última versión 1.9 y verlo?

No sé qué haría Ruby si usaras caracteres UTF8 extendidos como identificadores en tu código fuente, pero sé lo que yo haría, que sería darte una bofetada en la nuca y decirte NO HAGAS ESO.

Me encantaría ver

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

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

my_infinite_range = (1..∞)

return 'foo' if x ≠ y

2.21 ≈ 2.2

Me encantaría ver a alguien intentando escribir ese programa en un teclado en inglés :P

En Rubí 1.9.2-p0 (YARV) el resultado es el mismo que en la publicación original (es decir, Foo::bar #=> # NoMethodError:método indefinido 'barra' para Foo:Module).Además, lamentablemente las letras con tilde no se consideran superiores ni inferiores y los métodos relacionados no dan ningún resultado.

Ejemplos:

"á".upcase
=> "á"
"á" == "Á".downcase
=> false
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top