我看到了这种方法获得参数的方式,并想知道如何复制它。
红宝石/ OpenGL的:
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
我试过这个:
def my_method(*args)
puts args
end
my_method(0 | 1) #=> 1
但它不起作用。谢谢你的阅读!
Link查看方法。
答案 0 :(得分:5)
|
是一个bit-OR参数。 GL_COLOR_BUFFER_BIT
和GL_DEPTH_BUFFER_BIT
是整数常量(分别为0x00004000
和0x00000100
),操作结果为0x00000500
。这是传递给glClear
的内容 - 一个数字,而不是多个参数。
可以使用&
(位 - AND)运算符来排除整数位。 E.g。
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
这在Ruby中并不常见,因为我们有更好更清晰的方法来做类似的事情(例如,有人可能会说my_method(:read, force: true)
更清楚,而且使用起来肯定更简单)。但是,这在C语言中是非常标准的,而Ruby OpenGL是一个非常薄的C函数包装器。