在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 allows UTF-8 source code。那么℃
“大写”还是“低级”呢?那么⊂
(严格子集)还是Ɖ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
答案 0 :(得分:3)
This mailing list question, with answer from Matz表示Ruby 1.9内置的String#upcase
和String#downcase
方法只能处理ASCII字符。
如果不自行测试,我会将此视为源代码中所有非ascii字符可能被视为小写的强有力证据。
有人可以下载并编译最新的1.9并看到吗?
答案 1 :(得分:2)
如果您在源代码中使用扩展的UTF8字符作为标识符,我不知道ruby会做什么,但是我知道我会做什么,这会让你狠狠地抬起头来告诉你DON' T DO THAT
答案 2 :(得分:1)
我很想看到
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
答案 3 :(得分:1)
在 Ruby 1.9.2-p0(YARV)中,结果与原始帖子相同(即,Foo :: bar#=>#NoMethodError:undefined method'bar'for FOO:模块)。此外,遗憾的是,带有重音的字母不被视为上限或下限,相关方法不会产生任何结果。
示例:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false
答案 4 :(得分:0)
我无法让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]/
匹配)。