Hoe Ruby 1.9 handvatsel karakter gevalle in bron-kode?
Vra
In Ruby 1.8 en vroeër,
Foo
'n konstante (a Klas, 'n Module, of 'n ander konstante). Terwyl
foo
'n veranderlike. Die belangrikste verskil is soos volg:
module Foo
bar = 7
BAZ = 8
end
Foo::BAZ
# => 8
Foo::bar
# NoMethodError: undefined method 'bar' for Foo:Module
Dit is alles goed en wel, maar Ruby 1.9 kan UTF-8 bronkode . So is ℃
"hoofletters" of "lowecase" sover dit betref? Wat van ⊂
(streng subset) of Ɖfoo
?
Is daar 'n algemene reël?
Later:
Ruby-kern is reeds oorweeg 'n paar van die wiskundige operateurs. Byvoorbeeld
module Kernel
def √(num)
...
end
def ∑(*args)
...
end
end
sou toelaat
x = √2
y = ∑(1, 45, ...)
Ek sou graag wou sien
my_proc = λ { |...| ... }
x ∈ my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..∞)
return 'foo' if x ≠ y
2.21 ≈ 2.2
Oplossing 5
Ek kan nie kry IRR aan UTF-8 karakters aanvaar, so ek gebruik 'n toets script (/tmp/utf_test.rb
).
"λ" werk goed as 'n veranderlike naam:
# encoding: UTF-8
λ = 'foo'
puts λ
# from the command line:
> ruby -KU /tmp/utf_test.rb
foo
"λ" werk ook goed as 'n metode naam:
# 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
Dit werk nie as 'n konstante, al is:
# 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)
Ook nie die gekapitaliseer weergawe:
# 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)
My vermoede is dat konstante name moet begin met 'n kapitaal ASCII letter (moet /^[A-Z]/
pas).
Ander wenke
OK, my 'n grap antwoord nie af so goed gaan.
Dit poslys vraag, met antwoord uit Matz dui daarop dat Ruby 1.9 se gebou in String#upcase
en String#downcase
metodes net sal hanteer ASCII karakters.
Sonder om dit te toets myself, ek sou dit so sterk bewyse dat alle nie-ASCII karakters in bronkode waarskynlik sal oorweeg klein sien.
Kan iemand af te laai en stel die jongste 1,9 en sien?
Ek weet nie wat Ruby sou doen as jy gebruik uitgebreide UTF8 karakters soos ID's in jou bronkode, maar ek weet wat ek sal doen, wat sou wees om jou klap onderstebo die agterkant van die kop en jy vertel DON ' T HET WAT
Ek sou graag wou sien
my_proc = λ { |...| ... }
x ∈ my_enumerable # same as my_enumerable.include?(x)
my_infinite_range = (1..∞)
return 'foo' if x ≠ y
2.21 ≈ 2.2
Ek sou graag wou sien iemand probeer om die program te tik op 'n Engelse sleutelbord: P
Ruby 1.9.2-p0 (YARV) die resultaat is dieselfde as in die oorspronklike boodskap (dit wil sê, Foo :: bar # => # NoMethodError: undefined metode 'bar' vir Foo : Module). Ook briewe met aksent is ongelukkig nie as boonste of onderste beskou en verwante metodes produseer geen uitslag.
Voorbeelde:
"á".upcase
=> "á"
"á" == "Á".downcase
=> false