题
在 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 核心已经在考虑一些数学运算符。例如
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
解决方案 5
我无法让 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]/
).
其他提示
好吧,我开玩笑的回答不太受欢迎。
这个邮件列表问题,以及 Matz 的回答 表示 Ruby 1.9 内置 String#upcase
和 String#downcase
方法仅处理 ASCII 字符。
如果不亲自测试,我会认为这是强有力的证据,表明源代码中的所有非 ASCII 字符都可能被视为小写。
有人可以下载并编译最新的1.9看看吗?
我不知道如果你在源代码中使用扩展的 UTF8 字符作为标识符,ruby 会做什么,但我知道我会做什么,那就是拍你后脑勺并告诉你不要这样做
我愿意去看
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
在 红宝石 1.9.2-p0 (YARV) 结果与原始帖子中的结果相同(即 Foo::bar #=> # NoMethodError:Foo:Module 的未定义方法“bar”)。此外,不幸的是,带有重音的字母不被视为大写或小写,并且相关方法不会产生任何结果。
例子:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false
不隶属于 StackOverflow