5 に答える
OK、私の冗談の答えはうまくいきませんでした。
このメーリング リストの質問と 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
Ruby 1.9.2-p0 (YARV)では、結果は元の投稿と同じです (つまり、Foo::bar #=> # NoMethodError: undefined method 'bar' for Foo:Module)。また、残念ながらアクセント付きの文字は上下とは見なされず、関連するメソッドは結果を生成しません。
例:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false
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]/
ます)。