Pytanie Czy można używać wskaźników w Ruby?


Myślę, że Ruby jest interpretowane na C. Jeśli tak, jak mogę korzystać z koncepcji wskaźników i innych funkcji, które są częścią środowiska C? Jak możemy wykorzystać moc C z prostotą Ruby?


21
2017-08-26 18:00


pochodzenie


Jeśli chcesz wywołać bibliotekę C z Ruby, spróbuj ffi - Zabba
Co rozumiesz przez siłę? Co daje ci zastosowanie wskaźników w Ruby, poza wskaźnikami w Ruby? - Matt Fenwick
Ruby nie interpretuje się do C, interpreter Rubiego jest napisany w C. - Michael Kohl
@Michael: być precyzyjnym, za Interpreter Rubiego jest napisany w C. - Andrew Grimm


Odpowiedzi:


W Ruby (prawie) każda zmienna jest w rzeczywistości referencją / wskaźnikiem do obiektu, np.

a = [0, 1, 23]
b = a
a << 42
p b

da [0, 1, 23, 42] bo a i b wskazują na ten sam obiekt.

Tak naprawdę używasz wskaźników przez cały czas.

Jeśli chcesz wykonać arytmetykę wskaźnikową jak w C, nie jest to możliwe z Ruby.


25
2017-08-26 20:11



Nie dla obiektów Integer ... a = 1; b = a; b += 1; p a; wyjścia 1 - Leonardo Raele
@LeonardoRaele: liczby całkowite są specjalne, tak. Ale wciąż twój a jest odniesieniem. Po prostu nie można modyfikować obiektów całkowitych w miejscu. - undur_gongor
Reguła ta nie ma zastosowania do podstawowych typów, wszystkie stałe językowe muszą być przypisane przez kopię, podczas gdy a = 1 dajesz zmiennej "a" możliwość zastąpienia stałej 1 - martriay
bardzo interesujące spojrzenie na to, pochodzące z C - redpix_
Liczby całkowite nie są tak wyjątkowe. b += 1 w rzeczywistości jest b = b + 1, gdzie b + 1 powoduje, że nowy obiekt jest przypisany do b. Wartość a zostaje, ponieważ jest teraz innym obiektem. - D-side


"Moc C i prostota Rubinów" można przejść przez FFI, który jest o wiele lepszym interfejsem niż Win32API lub DL.

Za pomocą FFI możesz obsługiwać wskaźniki od C.

Oto dwa przykłady, które powinny zacząć:

  1. Jak wywołać funkcję C z biblioteki DLL, która zwraca wskaźnik do łańcucha znaków
  2. Jak wywołać funkcję Win32 z poziomu Rubiego

3
2018-01-06 14:13