Julia本身不支持多次返回.但是,Julia通过返回值元组来执行类似的功能,然后可以将其分配给变量元组.例如:
function mult_return()
(3,2)
end
Run Code Online (Sandbox Code Playgroud)
返回元组(3,2).然后我们可以将这两个返回值分配给不同的变量,如下所示:
(a,b) = mult_return()(或a,b = mult_return()因为括号不是必需的.)
我的问题是:有没有办法忽略其中一个返回值?例如,在Matlab语法中,用户可以编写:
[~, b] = mult_return()
Run Code Online (Sandbox Code Playgroud)
这样只将第二个值赋给变量.
在Julia中解决这个问题的正确方法是什么?
我正在用C编写一个用于低级图像处理的基本库.我知道其他(非常好的)库存在; 这对我来说是一次学习经历,而不是达到目的的手段.
我已经定义了以下(简化,针对此问题)构造:
union img_rawdata{
uint8_t* u8;
uint16_t* u16;
float* flt;
};
enum img_type{
IMG_U8,
IMG_U16,
IMG_FLT
};
struct image{
union img_rawdata rawdata;
enum img_type type;
unsigned int num_values;
};
Run Code Online (Sandbox Code Playgroud)
我的问题是:在联合中动态分配正确的指针有什么好处?
现在,我看到的唯一方法是使用switch语句,如:
void alloc_img(struct image* img, enum img_type type, unsigned int num_vals){
switch (type){
case IMG_U8:
img->rawdata.u8 = (uint8_t*)malloc(num_vals*sizeof(uint8_t));
break;
case IMG_U16:
img->rawdata.u16 = (uint16_t*)malloc(num_vals*sizeof(uint16_t));
break;
case IMG_FLT:
img->rawdata.flt = (float*)malloc(num_vals*sizeof(float));
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎并不那么糟糕; 但是,在我的实现中,实际的内存分配大约是50行(因为rawdata不是一维的,错误检查等).
是否有任何可以减少代码冗余的预处理器魔法,或者这是编写此代码的最佳方式?
或者,或者,是否有一种不同的方式来解决完全避免这个问题的问题?