لماذا لا أستطيع أن سلسلة سلسلتين وتعيينها إلى رمز؟
-
21-08-2019 - |
سؤال
و. . . كما في هذا المثال:
helloworld.rb:1: syntax error, unexpected '=', expecting $end
:helloworld = "hello ".concat("world")
وفكرت إذا كنت تستخدم CONCAT أنا تعديل السلسلة "مرحبا" واضاف "العالم" لذلك ومن ثم تعيين في نهاية المطاف السلسلة الناتجة - "مرحبا العالم" - إلى: رمز helloworld على الجانب الأيسر من يساوي إشارة. وأعتقد أن من شأنه أن يكون قانونيا، تماما كما لو كنت قد كتبت:
:helloworld = "hello world"
وأوه، الانتظار، التي لا تعمل إما. (رئيس الخدوش).
المحلول
وجرب هذا:
:"hello world"
نصائح أخرى
وحرف روبي لا يمكن أن يكون القيم المخصصة لها لأنها تمثل قيمة الكنسي. إذا كنت ترغب في بناء رمزا من سلسلة، يمكنك استخدام "مرحبا" .concat ( "العالم"). to_sym.
وحرف ومربكة عندما تأتي من اللغات التي ليس لديها أي شيء مثلهم. لا يمكنك تعيين لحرف، وهذا ليس ما كنت ل.
وفيما يلي بعض الأمثلة التي قد تساعد على تفسير ذلك.
5.times do |i|
# a new string is created in each iteration of the loop
puts "my string".object_id
# there is only ever one symbol for each possible value
# so a new object is not created during each iteration
puts :my_symbol.object_id
# this often makes a difference when you're using them for things like hash keys
#some_method(:name => 'bob')
#some_method('name' => 'bob')
end
والفارق الكبير الآخر هو أن المقارنة رمز هو مجرد المقارنة المؤشر.
ولعل ما كنت تبحث فعلا عن هو ثابت؟ ويمكن ديناميكيا، المشار إليها في وقت لاحق، وتحصل على تحذير إذا حاولت إعادة تعيين واحد.
>> HELLO_WORLD = "hello ".concat("world")
=> "hello world"
>> HELLO_WORLD = "foo"
(irb):3: warning: already initialized constant HELLO_WORLD
=> "foo"
لا يمكنك تعيين إلى رمز ولكن يمكنك العودة رمزا وهي سلسلة من الرموز الأخرى، على الرغم من أن لديك لتمرير من خلال سلاسل بقدر ما أعرف (أود أن أعرف إذا كان هناك طريقة أفضل).
لنفترض أنك تريد الحصول على :myway
رمز بدءا من :my
الرموز و:way
؛
(:my.to_s + :way.to_s).to_sym # return :myway
حسنا، نعم. لا يمكنك تعيين لحرف. هل تعني شيئا مثل:
foo = { :helloworld => "hello ".concat("world") }
class Symbol
def + (to)
return "#{self}#{to}".to_sym
end
end
وهذا عمل بالنسبة لي
@foo = 'world'
"hello #{@foo}".to_s.to_sym
والناتج =>: "العالم مرحبا"