Ruby 1.9 はソース コード内の文字の大文字と小文字をどのように処理しますか?
質問
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
解決 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
で Ruby 1.9.2-p0 (YARV) 結果は元の投稿と同じです (つまり、Foo::bar #=> # NoMethodError:Foo:Module の未定義メソッド 'bar')。また、アクセントのある文字は残念ながら上位または下位とは見なされず、関連するメソッドは結果を生成しません。
例:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false