В Ruby 1.8 и более ранних версиях
Foo
является константой (класс, модуль или другая константа). В то время как
foo
переменная Основное различие заключается в следующем:
module Foo
bar = 7
BAZ = 8
end
Foo::BAZ
# => 8
Foo::bar
# NoMethodError: undefined method 'bar' for Foo:Module
Это все хорошо, но Ruby 1.9 допускает исходный код UTF-8 . Так ℃
что же, в этом смысле «прописные» или «строчные»? Как насчет ⊂
(строгое подмножество) или Ɖfoo
?
Есть ли общее правило?
Позже:
Ruby-core уже рассматривает некоторые математические операторы. Например
module Kernel
def √(num)
...
end
def ∑(*args)
...
end
end
разрешит
x = √2
y = ∑(1, 45, ...)
Я бы хотел увидеть
my_proc = λ { |...| ... }
x ∈ my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..∞)
return 'foo' if x ≠ y
2.21 ≈ 2.2
Я не знаю, что сделал бы ruby, если бы вы использовали расширенные символы UTF8 в качестве идентификаторов в вашем исходном коде, но я знаю, что бы я сделал, то есть ударил бы вас по затылку и сказал, что НЕ ДЕЛАЙТЕ ЭТОГО
ОК, мой шутливый ответ не удался так хорошо.
Этот список рассылки вопрос, с ответом из Мац показывает , что Ruby 1.9 построен в String#upcase
и String#downcase
методов будет обрабатывать только ASCII - символы.
Без его тестирования я бы убедился в том, что все не-ascii символы в исходном коде, скорее всего, будут считаться строчными.
Может кто-нибудь скачать и скомпилировать последнюю 1.9 и посмотреть?
Я бы хотел увидеть
my_proc = λ { |...| ... }
x ∈ my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..∞)
return 'foo' if x ≠ y
2.21 ≈ 2.2
Я хотел бы видеть кого-то, кто пытается напечатать эту программу на английской клавиатуре: P
Я не могу заставить IRB принимать символы UTF-8, поэтому я использовал тестовый скрипт ( /tmp/utf_test.rb
).
«λ» отлично работает как имя переменной:
# encoding: UTF-8
λ = 'foo'
puts λ
# from the command line:
> ruby -KU /tmp/utf_test.rb
foo
«λ» также отлично работает как имя метода:
# 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
Это не работает как константа, хотя:
# 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)
Также не заглавная версия:
# 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)
Я подозреваю, что имена констант должны начинаться с заглавной буквы ASCII (должны совпадать /^[A-Z]/
).
В Ruby 1.9.2-p0 (YARV) результат такой же, как и в оригинальном посте (т.е. Foo :: bar # => # NoMethodError: неопределенный метод 'bar' для Foo: Module). Кроме того, буквы с акцентом, к сожалению, не считаются ни верхними, ни нижними, и связанные методы не дают результата.
Примеры:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false