Ruby 1.9如何处理源代码中的字符大小写?
时间:2020-03-05 18:42:06 来源:igfitidea点击:
在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
解决方案
回答
我不知道如果我们在源代码中使用扩展的UTF8字符作为标识符,ruby会怎么做,但是我知道我会怎么做,那就是将我们打倒在脑后,告诉我们不要这样做
回答
好吧,我的笑话回答得不太好。
这个邮件清单问题,加上Matz的回答,表明Ruby 1.9的内建在String#upcase
和String#downcase
方法中只能处理ASCII字符。
如果不自己进行测试,我会认为这是有力的证据,证明源代码中的所有非ASCII字符都可能被认为是小写字母。
有人可以下载并编译最新的1.9并查看吗?
回答
I would love to see
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:Foo:Module的未定义方法'bar')。而且,不幸的是,带有重音符号的字母不会被视为上下字母,并且相关方法也不会产生任何结果。
例子:
"á".upcase => "á" "á" == "á".downcase => false