🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
3 messages
3 total messages Started by jrsokolow Mon, 12 May 2008 21:02
ruby zmienne
#1067
Author: jrsokolow
Date: Mon, 12 May 2008 21:02
26 lines
1859 bytes
Witam,

pytanie odnosi się do następującej sytuacji w kodzie:

person1 = 'Tomek'
person2 = person1
person1 = 'Romek'

W tym przypadku zmienia się wartość jedynie referencji person1. I to
jest dla mnie jasne. Od momentu wykonania linijki numer 3, referencja
person1 wskazuje na inny obiekt.

Teraz drugi przykład

person1 = 'Tomek'
person2 = person1
person[0] = 'R'

W tym wypadku zmienia się obiekt na który wskazują zarówno person1 jak
i person2. Czy rozumiem iż poprzez odwołanie w postaci person1[0]
odwołujemy się konkretnie do obiektu na jaki wskazują referencje
person1 i person2.

Czy moje rozumowanie jest poprawne ?

Pozdrawiam.
Re: ruby zmienne
#1069
Author: Michał Kurek
Date: Tue, 13 May 2008 06:38
44 lines
1863 bytes
W artykule <696441ef-5f66-4fa5-ae45-669d200efb7b@k37g2000hsf.googlegroups.com>, jrsokolow@gmail.com napisał(a):

> Witam,
> Teraz drugi przykład
> 
> person1 = 'Tomek'
> person2 = person1
> person[0] = 'R'
> 
> W tym wypadku zmienia się obiekt na który wskazują zarówno person1 jak
> i person2. 

person1 przechowuje referencje do obiektu klasy String
person2 przechowuje referencje do tego samego obiektu:

>> person1 = 'Tomek'
=> "Tomek"
>> person2 = person1
=> "Tomek"
>> person1.object_id
=> 8950220
>> person2.object_id
=> 8950220

Zmienne przechowuja referencje do obiektow.
Jezeli chcesz utworzyc nowy obiekt na bazie starego:
>> person2 = person1.dup
=> "Tomek"
>> person1.object_id
=> 8950220
>> person2.object_id
=> 3111910

Jezeli zaczynasz z Rubym to polecam szybki kurs:
http://apohllo.pl/dydaktyka/ruby/intro/

Oraz dokumentacja do klasy String:
http://www.ruby-doc.org/core/classes/String.html

Pozdrawiam Michal Kurek

-- 
http://md6.org/
http://linuxlinki.md6.org/
Re: ruby zmienne
#1068
Author: Wojciech Piekutowski
Date: Tue, 13 May 2008 09:44
41 lines
2526 bytes
On May 13, 12:02 am, jrsoko...@gmail.com wrote:
> person1 = 'Tomek'
> person2 = person1
> person1 = 'Romek'
>
> W tym przypadku zmienia się wartość jedynie referencji person1. I to
> jest dla mnie jasne. Od momentu wykonania linijki numer 3, referencja
> person1 wskazuje na inny obiekt.
Dokładnie.

> person1 = 'Tomek'
> person2 = person1
> person[0] = 'R'
>
> W tym wypadku zmienia się obiekt na który wskazują zarówno person1 jak
> i person2. Czy rozumiem iż poprzez odwołanie w postaci person1[0]
> odwołujemy się konkretnie do obiektu na jaki wskazują referencje
> person1 i person2.
person1[0] = 'R' # jest to w rzeczywistości wywołanie metody []= z
argumentami: 0, 'R' na obiekcie do którego odnosi się person1
Można napisać też:
person1.[]=(0, 'R')
Pierwsz zapis to tak zwany 'syntactic sugar'. Metoda instancyjna
[]=(index, nowy_napis) klasy String zamienia część napisu pod index na
nowy_napis.

Referencje Ruby działają tak samo jak w Javie. Różnica jest taka, że w
Javie są 2 rodzaje zmiennych: referencje do obiektów i prymitywy
(liczy całkowite, itd...). W Ruby mamy tylko referencje więc mówimy na
nie po prostu zmienne. Pisząc . po zmiennej wywołujesz metodę na
konkretnym obiekcie.

Przykład
a = 1
b = 2
c = a + b
d = a.+(b)
c == d # => true

Pozdrawiam,
Wojciech Piekutowski
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads