如何使用|将多个参数传递给Ruby方法

时间:2017-07-24 00:52:15

标签: ruby opengl

我看到了这种方法获得参数的方式,并想知道如何复制它。

红宝石/ OpenGL的:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

我试过这个:

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

但它不起作用。谢谢你的阅读!

Link查看方法。

1 个答案:

答案 0 :(得分:5)

|是一个bit-OR参数。 GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT是整数常量(分别为0x000040000x00000100),操作结果为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函数包装器。