2008-08-22 8 views
5

रूबी 1.8 में और इससे पहले,रूबी 1.9 स्रोत कोड में चरित्र मामलों को कैसे संभालता है?

Foo 

एक निरंतर (एक क्लास, एक मॉड्यूल, या किसी अन्य स्थिर) है। जबकि

foo 

एक चर है।

module Foo 
    bar = 7 
    BAZ = 8 
end 

Foo::BAZ 
# => 8 

Foo::bar 
# NoMethodError: undefined method 'bar' for Foo:Module 

सब कुछ ठीक है और अच्छा है कि है, लेकिन रूबी 1.9 allows UTF-8 source code: मुख्य अंतर इस प्रकार है। तो "अपरकेस" या "लोअरकेस" जहां तक ​​यह चिंतित है? (सख्त सबसेट) या Ɖfoo के बारे में क्या?

क्या कोई सामान्य नियम है?

बाद में:

रूबी कोर पहले से ही गणितीय ऑपरेटरों में से कुछ विचार कर रहा है। उदाहरण

लिए
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 
+1

रूबी एपीएल में तब्दील हो रहा है? –

उत्तर

0

मैं आईआरबी UTF-8 वर्णों को स्वीकार नहीं प्राप्त कर सकते हैं, तो मैं एक परीक्षण स्क्रिप्ट का इस्तेमाल किया (/tmp/utf_test.rb)।

# 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 
λ = 'foo' 
puts λ 

# from the command line: 
> ruby -KU /tmp/utf_test.rb 
foo 

"λ" यह भी एक विधि नाम के रूप में ठीक काम करता है:

"λ" एक चर नाम के रूप में ठीक काम करता है:

# 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]/ से मेल खाना चाहिए)।

2

मैं नहीं जानता कि अगर आप अपने स्रोत में पहचानकर्ता के रूप में UTF8 वर्ण बढ़ाया करते थे गहरे लाल रंग का क्या करेंगे कोड, लेकिन मुझे पता है कि मैं क्या करूँगा, जो आपको सिर के पीछे की ओर झुकाएगा और आपको बताएगा कि

+1

टाइपो: बताएं => yell ;-) – webmat

3

ठीक है, मेरा मजाक जवाब इतना अच्छा नहीं हुआ।

This mailing list question, with answer from Matz इंगित करता है कि रूबी 1.9 String#upcase और String#downcase विधियों में निर्मित केवल ASCII वर्णों को संभालेगा।

इसे स्वयं परीक्षण किए बिना, मैं इसे मजबूत सबूत के रूप में देखता हूं कि स्रोत कोड में सभी गैर-असीसी वर्णों को लोअरकेस माना जाएगा।

क्या कोई नवीनतम 1.9 डाउनलोड और संकलित कर सकता है और देख सकता है?

1

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 

मैं किसी एक अंग्रेजी कीबोर्ड पर कि कार्यक्रम टाइप करने के लिए कोशिश कर रहा है देखने के लिए प्यार होता है: पी

+0

आपकी आशंका निश्चित रूप से जरूरी है, लेकिन मैं खुशी से टेक्स्टमेट मैक्रोज़ का निर्माण + टैब को tab में बदलने के लिए करूंगा। टाइपिंग शामिल करने से कम नहीं है ?, लेकिन मुझे लगता है कि कोड कहता है कि मेरा क्या मतलब है और स्पष्ट रूप से। मुझे यकीन है कि यह एक स्वाद मुद्दा है; मुझे बस कॉलेज में मेरी अलग गणित कक्षाएं पसंद आईं। –

1

रूबी 1.9.2-p0 (YARV) में परिणाम मूल पोस्ट में के रूप में ही नहीं है (यानी, फू :: बार # => # NoMethodError: फू के लिए अपरिभाषित विधि 'बार': मॉड्यूल)। इसके अलावा, उच्चारण के साथ अक्षरों को दुर्भाग्य से ऊपरी और न ही निचले और संबंधित तरीकों के रूप में नहीं माना जाता है, जिसके परिणामस्वरूप कोई परिणाम नहीं मिलता है।

उदाहरण:

"á".upcase 
=> "á" 
"á" == "Á".downcase 
=> false 
संबंधित मुद्दे