在 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#upcaseString#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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top