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
È stato utile?

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top