在ruby中编写一个相当简单的命令行工具我需要在命令行参数中报告有关错误的有意义的消息,或者在程序中报告其他错误条件.(未找到输入文件,输入格式无效等)
现在,我只是在检测参数列表中的错误时使用合理的描述引发ArgumentError.这是一种好的做法,还是冒着隐藏编程错误的风险?换句话说,系统定义的ruby异常是否适用于应用程序,或者我们是否应始终创建自己的异常以报告非系统错误?
编辑: 作为一个例子,如果我调用一个参数数量错误的方法,ruby会引发ArgumentError.这是一个编程错误,我想通过堆栈跟踪和所有来告诉我.但是,当我的程序输入不正确时,我可能想给用户一个简短的消息,或者甚至无声地忽略它.这告诉我,ArgumentError不适合应用程序自己使用.
在混合C/C++项目中,我们需要从C调用C++函数.要调用的函数被重载为三个独立的函数,但是我们可以忽略C语言中的那个,我们只选择一个最合适的函数并坚持使用它.
有两种方法可以做到这一点:(1)编写一个带有extern"C"函数的小型C++包装器,它将调用转发给选定的重载函数,或者(2)用hackish方式声明我们想要调用的一个函数C为外部"C".
问题是,第二种变体是否有任何缺点(除了恶梦和恶业)?换句话说,给定三个重载函数,其中一个被声明为exern"C",我们应该期待C++方面的问题,还是根据标准很好地定义?
我一直试图阅读这个,但我找不到任何提及它.
根据标准,创建的字符串S"无法修改,并且从Gforth的简单实验中可以明显看出字符串的空间不是来自字典或填充区域:
hex
here . 7F48AB3B8758 ok
pad . 7F48AB3B8808 ok
s" test" .s <2> 77FDD0 4 ok
Run Code Online (Sandbox Code Playgroud)
我可以期待该地址有效多长时间?
换句话说,如果我将这个地址(和计数)存储在一个变量中,我可以稍后在程序中再参考它,还是需要将它移动到字典或堆中的单独位置?如果我不存储地址,我会泄漏内存吗?
我正在尝试使用OmniAuth从头开始构建一个新的rails 3应用程序.目前我只有一个完全空的应用程序,我在Gemfile中添加了omniauth,并在config/initializers中添加了omniauth.rb,如下所示:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, 'APP_ID', 'APP_SECRET'
end
Run Code Online (Sandbox Code Playgroud)
(当然,除了正确的app id和秘密而不是占位符.)
这似乎在使用Webrick从我的开发机器运行时起作用,但是facebook发出错误,因为localhost:3000未注册为应用程序.所以我将它上传到生产服务器进行测试.这里的请求似乎完全绕过了机架层,最终导致路由器抛出RoutingError,因为在routes.rb中没有定义名为/ auth/facebook的路由.
服务器运行apache 2.2,ruby 1.8.7,rails 3.0.1,rack 1.2和passenger 3.0.0.有什么明显我想念的吗?
顺便说一句,该应用程序安装到子URL,即http://www.mydomain.net/myapp
我想确保在编辑用户时密码字段为空。我如何在功能测试中做到这一点?
我已经尝试了这两种变体:
assert_select "input[name=?][value=?]", 'user[password1]', ''
Run Code Online (Sandbox Code Playgroud)
和
assert_tag :tag => "input", :attributes => {:name => "user[password1]", :value => ""}
Run Code Online (Sandbox Code Playgroud)
两者都失败,因为value=生成的 html 中不存在属性。我没有看到任何测试生成的 html 中不存在属性的方法?
我是编程学习C语言的新手.我现在很困惑.我试图谷歌,但无法找到令人满意的结果,所以我想通过在这个网站上提问来解决.
看看这个简短的节目
#include<stdio.h>
int main()
{
int num1,num2;
printf("enter the value of num1 and num2:");
scanf("%d %d",&num1,&num2);
printf("num1 = %d and num = %d",num1,num2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我输入值例如 - 215-15没有space或new line没有它给出输出num1 = 215和num2 = -15但当我输入space或new line介于215-和15之间然后它给出输出num1 = 215和num2 = -175436266(或任何意外数).
我知道当scanf()读取任何不在转换规范类别中的字符时,它会放回该字符并结束处理其他输入.但在第一种情况下-(minus sign),根据转换规范似乎是无关紧要的输入,但它显示正确的输出但在后一种情况下它没有显示正确的输出.为什么?
所以我正在学习结构,并且正在尝试输入带有动态内存分配的字符串.
这是我到目前为止:
typedef struct{
char foo[81];
} TYPE;
void function(TYPE get[]){
char a[81];
scanf("%s", a);
get->foo = malloc(strlen(a)+1*sizeof(char)); //this line produces an error that it is not assignable
strcpy(get->foo,a);
return;
}
Run Code Online (Sandbox Code Playgroud)
我不确定该声明有什么问题,任何帮助都会得到很好的赞赏.
在这里寻求一些建议.
我有一个结构,其中包含指向另一个结构的指针,如下所示:
struct item
{
int type;
struct user *owner;
};
Run Code Online (Sandbox Code Playgroud)
我也有访问器功能,如下所示:
int item_get_type(const struct item * i);
struct user * item_get_owner(const struct item * i);
Run Code Online (Sandbox Code Playgroud)
我的问题是关于这些功能中的第二个:这是否违反了有关const使用的任何规则或最佳实践?
我在这里使用const的原因是表示访问器函数不会修改传递给它的结构,但允许调用者修改返回的结构.我最好在论证中删除const吗?
我没有任何评论地赞成这个功能.我想知道这个功能在做什么?有帮助吗?
int flr(int n, char a[])
{
#define A(i) a[((i) + k) % n]
int l[n], ls = n, z[n], min = 0;
for (int i = 0; i < n; i++)
{
l[i] = i;
z[i] = 1;
}
for (int k = 0; ls >= 2; k++)
{
min = l[0];
for (int i=0; i<ls; i++) min = A(l[i])<A(min) ? l[i] : min;
for (int i=0; i<ls; i++) z[A(l[i])!=A(min) ? l[i] : (l[i]+k+1)%n] = 0;
for (int ls_=ls, …Run Code Online (Sandbox Code Playgroud) int m[1000]; //declaring global array
int added(int input){
for(int i=1;i<= input; i++){
if(i>0 && input % 2) // checking if the numbers are even...
m[i]= input; //array implementation
return m[i];
}
}
int main()
{
for(int j=2;j<54;j++){
printf("%d",m[i]);
putchar('\n');
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试从函数返回数组.为什么不工作?在for循环中实现了数组.
在C中,人们经常在使用malloc后检查空指针.但是,在C++中,我们将使用"new".我已经做了一些搜索,一个解释malloc和new之间的区别如下:https: //isocpp.org/wiki/faq/freestore-mgmt#new-malloc-diff
从上面的链接引用:
malloc()通过抛出异常(bad_alloc)返回0.报告分配和初始化错误来报告内存耗尽.
但是OS(Linux或Windows)如何对这个bad_alloc异常做出反应?