面试题答案
一键面试- 创建C扩展模块:
- 首先,创建一个C源文件(例如
add.c
),内容如下:
- 首先,创建一个C源文件(例如
#include "ruby.h"
static VALUE add(VALUE self, VALUE a, VALUE b) {
int num_a = NUM2INT(a);
int num_b = NUM2INT(b);
int result = num_a + num_b;
return INT2NUM(result);
}
void Init_add() {
VALUE m = rb_define_module("AddModule");
rb_define_module_function(m, "add", add, 2);
}
- 编写
extconf.rb
文件:- 在同一目录下创建
extconf.rb
文件,内容如下:
- 在同一目录下创建
require 'mkmf'
create_makefile('add')
- 编译C扩展:
- 在终端中,进入包含
add.c
和extconf.rb
的目录,执行以下命令:
- 在终端中,进入包含
ruby extconf.rb
make
- 在Ruby中调用:
- 创建一个Ruby脚本(例如
main.rb
),内容如下:
- 创建一个Ruby脚本(例如
require_relative 'add'
result = AddModule.add(3, 5)
puts result
以上步骤中:
- 在C代码部分,通过Ruby提供的API将C函数
add
封装成可以在Ruby中调用的形式,Init_add
函数用于初始化扩展模块。 extconf.rb
文件用于生成Makefile,make
命令依据Makefile编译C代码生成动态库。- Ruby脚本中,通过
require_relative
引入扩展模块,然后调用模块中的add
方法并输出结果。