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

标签 ruby opengl

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

ruby /OpenGL:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

我试过这个:

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

但它不起作用。感谢阅读!

Link查看方法。

最佳答案

| 是一个 bit-OR争论。 GL_COLOR_BUFFER_BITGL_DEPTH_BUFFER_BIT是整型常量(分别是0x000040000x00000100),运算结果为0x00000500。这是传递给 glClear 的内容 - 一个数字,而不是多个参数。

可以使用 &(位与)运算符从整数中梳理出位。例如

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 函数的一个非常薄的包装器。

关于ruby - 如何使用 | 将多个参数传递给 Ruby 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45271241/

相关文章:

ruby - 需要 : command not found

arrays - 大型数组中的几何着色器错误

ios - 将 3D 随机立方体旋转四舍五入到最近的 90 度

c - 行优先与列优先混淆

arrays - 构造一个内部包含条件逻辑的 Ruby 数组

php - Javascript V8 会杀死所有其他服务器端动态语言吗? ruby 、 python 、PHP?

ruby - Readline 在 rvm 中不工作 - Ubuntu 11.10

ruby-on-rails - 升级到 Rails 5 的问题 - 在过滤器之前

c++ - 仅对某些对象透明?

c++ - OpenGL 不绘制三角形