Ruby内联-返回双值 要求“内联” 类内联测试 内联(:C)do | builder| 建筑商c' 值arr_距离(值arr1、值arr2){ 长arr1_len=RARRAY_len(arr1); 长arr2_len=RARRAY_len(arr2); 如果(arr1_len==0 | arr2_len==0){ 返回0.0; } 否则{ 长i,j; 整数计数=0; 值*c_arr1=RARRAY_PTR(arr1); 值*c_arr2=RARRAY_PTR(arr2); 对于(i=0;i
我使用上述逻辑来计算匹配百分比Ruby内联-返回双值 要求“内联” 类内联测试 内联(:C)do | builder| 建筑商c' 值arr_距离(值arr1、值arr2){ 长arr1_len=RARRAY_len(arr1); 长arr2_len=RARRAY_len(arr2); 如果(arr1_len==0 | arr2_len==0){ 返回0.0; } 否则{ 长i,j; 整数计数=0; 值*c_arr1=RARRAY_PTR(arr1); 值*c_arr2=RARRAY_PTR(arr2); 对于(i=0;i,ruby,inline,Ruby,Inline,我使用上述逻辑来计算匹配百分比 上面的示例代码打印0。我希望它打印1.0使用DBL2NUM: require 'inline' class InlineTest inline(:C) do |builder| builder.c ' VALUE arr_distance(VALUE arr1, VALUE arr2){ long arr1_len = RARRAY_LEN(arr1); long arr2_len = RARRAY_L
上面的示例代码打印
0
。我希望它打印1.0
使用DBL2NUM
:
require 'inline'
class InlineTest
inline(:C) do |builder|
builder.c '
VALUE arr_distance(VALUE arr1, VALUE arr2){
long arr1_len = RARRAY_LEN(arr1);
long arr2_len = RARRAY_LEN(arr2);
if(arr1_len == 0 || arr2_len == 0){
return 0.0;
}
else{
long i, j;
int count = 0;
VALUE *c_arr1 = RARRAY_PTR(arr1);
VALUE *c_arr2 = RARRAY_PTR(arr2);
for(i = 0; i < arr1_len; i++){
for(j = 0; j < arr2_len; j++){
if(rb_str_cmp(c_arr1[i], c_arr2[j]) == 0){
count++;
}
}
}
VALUE arr1_match = count/arr1_len;
VALUE arr2_match = count/arr2_len;
VALUE match_percent = (arr2_match * 10 + arr1_match) / 11.0;
return match_percent; //This does not return double value.
}
}'
end
end
p InlineTest.new.arr_distance(['1', '2', '3'], ['1', '2', '3']) # => 0
builder.c'
值arr_距离(值arr1,值arr2){
长arr1_len=RARRAY_len(arr1);
长arr2_len=RARRAY_len(arr2);
如果(arr1_len==0 | arr2_len==0){
返回DBL2NUM(0.0);/*再次非常感谢!我还有一个问题-。你能帮我吗?
builder.c '
VALUE arr_distance(VALUE arr1, VALUE arr2){
long arr1_len = RARRAY_LEN(arr1);
long arr2_len = RARRAY_LEN(arr2);
if(arr1_len == 0 || arr2_len == 0){
return DBL2NUM(0.0); /* <------------ */
}
else{
long i, j;
int count = 0;
VALUE *c_arr1 = RARRAY_PTR(arr1);
VALUE *c_arr2 = RARRAY_PTR(arr2);
for(i = 0; i < arr1_len; i++){
for(j = 0; j < arr2_len; j++){
if(rb_str_cmp(c_arr1[i], c_arr2[j]) == 0){
count++;
}
}
}
VALUE arr1_match = count/arr1_len;
VALUE arr2_match = count/arr2_len;
double match_percent = (arr2_match * 10 + arr1_match) / 11.0;
return DBL2NUM(match_percent); /* <------------- */
}
}'