在一些应用程序,我维护的地方很多,我发现它使用一个代码try/finally
或try/except
块一个for loop
或if
句子避免使用开始/结束
考虑下一个代码(不是生产代码,只是一个样本)
{$APPTYPE CONSOLE}
{$R *.res}
uses
Classes,
SysUtils;
Procedure TestNoBeginEnd;
var
i : Integer;
L1 : TStringList;
begin
for i := 1 to 10 do
try
L1:=TStringList.Create;
try
L1.Add('Bar');
L1.Add(IntToStr(i));
L1.Add('Foo');
finally
Writeln(L1.Text);
L1.Free;
end;
except
on E: Exception do
Writeln('Opps '+E.ClassName, ': ', E.Message);
end;
end;
begin
try
TestNoBeginEnd;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
问题,被认为是一种不好的做法,代码嗅觉或使用try/finally或try/except而不是delphi中的begin/end存在任何缺点?
UPDATE
对于愚蠢的示例代码我很抱歉,只是为了澄清try/finally并尝试/除了不假装替换开始/结束,只是为了避免使用它(开始/结束)当存在使用时的情况try/finally或try/except不需要开始/结束.
这涉及C++(MinGW),Qt,Windows Vista:
这一切都是在我用C++开发非GUI应用程序的时候.最近我决定尝试在Qt中使用GUI,并且遇到一些设计问题.
这是问题所在:
我正在使用while(getline(inputFileStream,stringLine)){...}所以我放置了QCoreApplication :: processEvents(); 在循环内.
应用程序变得非常慢.所以我放置了一个计数器,只有当它达到特定值时才会出现QCoreApplication :: processEvents(); 被执行.
现在,gif动画变得更像一系列帧,从一个帧到另一个可见的过渡.
任何更快的触发processEvents()都会降低应用程序的速度(无论如何,它都不能靠近非GUI执行时间).
正如我在Windows任务管理器中看到的那样,一个核心具有高利用率,而另一个核心在执
那我应该采取什么方法?我应该深入研究变异(我从未使用过它)吗?
剥离一切来解释程序看起来像这样的问题:
class Animation;
class FileProcessing;
main(int argc,char** argv) {
QApplication* app=new QApplication(argc,argv);
QLabel* label1=new QLabel(...);
QLabel* label2=new QLabel(...);
Animation* objAnim=new Animation(...); //QMovie plays gif
objAnim->show();
//fileDialogs --> ask for files..this is modal so animation is fine till this point
FileProcessing* objFileProcessing=new FileProcessing(...);
objFileProcessing->processFiles(label1,label2); //process >2GB files
//in this i repeatedly call processEvents() as written …
Run Code Online (Sandbox Code Playgroud) 这个问题是我之前发表的题为" 如何修复此过程"将字符串写入控制台屏幕缓冲区的后续问题.
我想在写入任意字符串之前将光标设置为给定的(x,y)位置:
GotoXY(x,y)
SendLn('The harder they come...');
Run Code Online (Sandbox Code Playgroud)
如何procedure GotoXY(x, y: integer)
实施?
我工作的组件,用于delphi 7
和delphi 2006
,组件使用SynTaskDialog.pas
从synopse,我已经成功地使用了SynTaskDialog.pas
的delphi 7
成分,但是当我试图在使用它delphi 2006
来创建组件包.我收到一个错误
我在synopse.info/forum上找到了相同的解决方案
引用:
我找到了两个解决方法:要么
Run Code Online (Sandbox Code Playgroud)TD_ICONS_IDENT: array[TTaskDialogIcon] of string =( '', SMsgDlgWarning, SMsgDlgConfirm, SMsgDlgError, SMsgDlgInformation, '', SMsgDlgInformation);
并删除一些LoadResString调用或
2.使用类似函数替换指针数组
Run Code Online (Sandbox Code Playgroud)GetIconIdent(TTaskDialogIcon): Pointer
但即便如此,我无法编译组件的包.而这些错误来了
[Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgOK' from unit 'SynTaskDialog'
[Pascal Error] E2201 Need imported data reference ($G) to access 'SMsgDlgYes' from unit 'SynTaskDialog'
[Pascal Error] E2201 Need imported data reference ($G) to access …
Run Code Online (Sandbox Code Playgroud) 当库通过静态初始化程序运行时,Vibe.D 是否具有内置终止函数?我想在 vibe.d 抛出异常时终止应用程序,例如打开文件。
我有一个服务器正在使用该listenHTTP
功能进行侦听。
我有内容控制器与REST方法(index..create..store ..),我想在运行任何这些方法之前运行一些代码.
我想要做的是为我的布局设置var,其中一些数据与Content controller中的所有方法相关:
$this->layout->myvar = 'some-data';
Run Code Online (Sandbox Code Playgroud)
我试着这样做:
class ContentController extends BaseController {
function __construct() {
$this->layout->myvar= 'some-data';
}
..
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用.我得到"尝试分配非对象的属性"错误.
这是我的路线:
Route::group(array('domain'=>'{subdomain}.example.com'), function()
{
Route::group(array('before'=>array('authenticate')), function()
{
Route::resource('post', 'PostController');
Route::resource('comments', 'CommentsController');
Route::resource('forum', 'ForumController');
Route::resource('users', 'UsersController');
});
});
Run Code Online (Sandbox Code Playgroud)
似乎默认情况下我所有的资源控制器都将子域作为第一个参数,我找不到改变它的方法.
如果可能的话,我想完全忽略子域名.
用例示例:
admin.example.com/forum/1?domain=foo
foo.example.com/forum/1
bar.example.com/forum/2
该网站拥有2个论坛,但只有1个管理员管理所有这些论坛.要管理员访问论坛foo,管理员还必须提供domain = foo来查看它.
我能够创建一个 jwt 令牌:
fastify.post('/signup', (req, reply) => {
const token = fastify.jwt.sign({
payload,
})
reply.send({ token })
})
Run Code Online (Sandbox Code Playgroud)
可以返回如下内容:
{“令牌”:“eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE1MjM3MDgyMzF9.HZqiL7wwPaEQihUGoF7Y42Ia67HgKJ-1Ms38Nvcsmw”}
但如果我尝试从令牌中解码用户名
fastify.get('/decode', async (request, reply) => {
const auth = request.headers.authorization;
const token = auth.split(' ')[1]
fastify.jwt.verify(token, (err, decoded) => {
if (err) fastify.log.error(err)
fastify.log.info('username : ' + decoded.username)
reply.send({
foo: decoded,
})
})
})
Run Code Online (Sandbox Code Playgroud)
回应是:
{“foo”:{“iat”:1523660987}}