2017-07-24 2 views
1

Ich sah die Art, wie Argumente diese Methode bekommen und wollte wissen, wie man es repliziert.Wie gebe ich mehrere Argumente an eine Ruby-Methode mit |

Rubin/OpenGL:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 

ich mit dieser versucht:

def my_method(*args) 
    puts args 
end 
my_method(0 | 1) #=> 1 

Aber es funktioniert nicht. Danke fürs Lesen!

Link, um die Methode zu sehen.

Antwort

5

| ist ein bit-OR Argument. GL_COLOR_BUFFER_BIT und GL_DEPTH_BUFFER_BIT sind ganzzahlige Konstanten (0x00004000 bzw. 0x00000100), und das Ergebnis der Operation ist 0x00000500. Dies wird in glClear übergeben - eine einzelne Zahl, nicht mehrere Argumente.

Man kann den Operator & (bit-AND) verwenden, um Bits aus ganzen Zahlen herauszuholen. Z.B.

WRITE = 1 
READ = 2 
FORCE = 4 
def my_method(code) 
    puts "write" if code & WRITE != 0 
    puts "read" if code & READ != 0 
    puts "force" if code & FORCE != 0 
end 

my_method(READ | FORCE) 
# => read 
# => force 

Dies ist nicht sehr üblich in Ruby, wie wir bessere und klarere Möglichkeiten haben, ähnliche Dinge zu tun (zum Beispiel könnte man sagen my_method(:read, force: true) ist klarer, und es ist auf jeden Fall einfacher zu bedienen). Dies ist jedoch ziemlich Standard in C und Ruby OpenGL ist ein ziemlich dünner Wrapper über die C-Funktionen.

+0

Danke !!!! so klar. – Andrek

Verwandte Themen