小编Jen*_*off的帖子

使用不同的组合器(.)可以使无点函数更具可读性吗?

什么是无边表达的潜在替代表示(例如使用箭头,镜头,Haskell习语,做语法),这些表达式可以更像简单的英语?

这是一个简单的例子:

qNameIs :: String -> QName -> Bool
qNameIs = (. qName) . (==)
Run Code Online (Sandbox Code Playgroud)

QName 来自的记录 Text.Xml

什么可能相当于qNameIs但不是有意义的表达?理想情况下,那些会显示第一个参数将被传递给(==)结果的结果将被评估,结果qName应用于该表达式的第二个参数?

haskell pointfree

11
推荐指数
1
解决办法
339
查看次数

我如何处理AST中的评论?

我正在使用Parsec编写Delphi代码解析器,我目前的AST数据结构如下所示:

module Text.DelphiParser.Ast where

data TypeName = TypeName String [String] deriving (Show)
type UnitName = String
data ArgumentKind = Const | Var | Out | Normal deriving (Show)
data Argument = Argument ArgumentKind String TypeName deriving (Show)
data MethodFlag = Overload | Override | Reintroduce | Static | StdCall deriving (Show)
data ClassMember = 
      ConstField String TypeName
    | VarField String TypeName
    | Property String TypeName String (Maybe String)
    | ConstructorMethod String [Argument] [MethodFlag]
    | DestructorMethod String [Argument] [MethodFlag]
    | ProcMethod …
Run Code Online (Sandbox Code Playgroud)

delphi haskell comments abstract-syntax-tree

11
推荐指数
1
解决办法
448
查看次数

使用初始化部分进行模块注册是个好主意吗?

我正在为分散式模块注册寻找一个好的解决方案.

我不想要一个使用项目所有模块单元的单元,但我宁愿让模块单元自己注册.

我能想到的唯一解决方案就是依赖initializationDelphi单元.

我写了一个测试项目:

单元2

TForm2 = class(TForm)
private
  class var FModules: TDictionary<string, TFormClass>;
public
  class property Modules: TDictionary<string, TFormClass> read FModules;
  procedure Run(const AName: string);
end;

procedure TForm2.Run(const AName: string);
begin
  FModules[AName].Create(Self).ShowModal;
end;

initialization
  TForm2.FModules := TDictionary<string, TFormClass>.Create;

finalization
  TForm2.FModules.Free;
Run Code Online (Sandbox Code Playgroud)

UNIT3

TForm3 = class(TForm)

implementation

uses
  Unit2;

initialization   
  TForm2.Modules.Add('Form3', TForm3);
Run Code Online (Sandbox Code Playgroud)

UNIT4

TForm4 = class(TForm)

implementation

uses
  Unit2;

initialization   
  TForm2.Modules.Add('Form4', TForm4);
Run Code Online (Sandbox Code Playgroud)

这有一个缺点.是否保证我的注册单元(在本例中为Unit2s)initialization部分始终先运行?

我经常阅读关于initialization部分的警告,我知道我必须避免在其中引发异常.

delphi module delphi-units initialization-order delphi-xe3

10
推荐指数
3
解决办法
4966
查看次数

单击重叠项目上的事件

我有

  • 具有单击事件的表行
  • 单击事件的按钮,该按钮位于表格行上

我有问题 当我点击按钮时,行点击事件也会执行,但我不想要这种行为.我只想点击按钮执行,没有行点击.

javascript jquery events onclick buttonclick

9
推荐指数
2
解决办法
8691
查看次数

如何识别与sybase数据库中的表关联的触发器?

我正在使用SQL Advantage,需要知道SQL是什么来识别与表关联的触发器.我没有选择使用其他工具,所以老式的SQL解决方案是理想的答案.

sql sybase triggers

8
推荐指数
3
解决办法
4万
查看次数

如何将BLOB流中的任意图像加载到TImage中?

如果我理解正确,请TImage.LoadFromFile从文件扩展名确定图片类型.

有没有办法从TBlobStream原始图像中自动检测图像类型?

我目前的代码:

procedure LoadImageFromStream(AImage: TImage; ADataSet: TDataSet);
var
  Stream: TStream;
begin
  Stream := ADataSet.CreateBlobStream(Field, bmRead);
  try
    AImage.Picture.Graphic.LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end
Run Code Online (Sandbox Code Playgroud)

delphi timage stream detect delphi-2007

8
推荐指数
2
解决办法
1万
查看次数

在OleVariant后面释放界面的正确方法是什么?

我试图找到一种安全/确定的方法来释放封装在OleVariant中的接口.

AFAICS Delphi在程序结束时发布接口引用,但在我的情况下我必须提前完成,因为我必须关闭COM.

procedure Test;
var
  LLibrary: OleVariant;
begin
  CoInitialize(nil);
  try
    LLibrary := Null;
    try
      LLibrary := CreateOleObject(LibraryName);
    finally
      LLibrary := Unassigned; // <-- I would like to release the interface here
    end;
  finally
    CoUninitialize; // <-- Shutdown of COM
  end;
end; // <-- The compiler releases the interface here
Run Code Online (Sandbox Code Playgroud)

我把OleVariant放在一个额外的类实例中,我可以在调用之前释放它CoUninitialize.

procedure Test;
var
  Container: TLibraryContainer; // Holds the OleVariant
begin
  CoInitialize(nil);
  try
    Container := TLibraryContainer.Create;
    try
      {...}
    finally
      Container.Free;
    end;
  finally
    CoUninitialize;
  end;
end;
Run Code Online (Sandbox Code Playgroud)

这个解决方案是安全的还是我忽略了一个更好的解决方案?

delphi com finalization delphi-2007

8
推荐指数
1
解决办法
2667
查看次数

在另一个TForm中嵌入TForm时如何避免问题?

我经常将一个TForm后代嵌入另一个TForm后代,如下所示:

var
  Form1: TForm1;
  Form2: TForm2;
begin
  Form2.Parent      := Form1;
  Form2.BorderStyle := bsNone;
  Form2.Align       := alClient;
  Form2.Show;
end;
Run Code Online (Sandbox Code Playgroud)

通常这很好用,但有时Form2中的控件没有正确对齐.这类问题有一般的解决方法吗?

有人知道造成这种"错位"的原因吗?

我知道我可以TFrame用于这种工作,但我有很多库代码,我必须重写,我没有看到任何理由为什么TFormin TForm方法不起作用?

编辑:我已将组件识别TcxListView为罪魁祸首,我已向组件供应商(DevExpress)提交了错误报告:

http://www.devexpress.com/issue=B194161

编辑2: DevExpress的开发人员已经分析了这个问题并说它实际上是TGridPanelEmbarcadero组件中的缺陷:

http://qc.embarcadero.com/wc/qcmain.aspx?d=90324

delphi layout vcl delphi-2007 tframe

7
推荐指数
1
解决办法
2911
查看次数

如何确保使用Spring Framework在我的应用程序中包含给定的依赖项?

这将是一个难以描述的问题,但是这里有.

我们正在使用Delphi Spring Framework.(http://code.google.com/p/delphi-spring-framework/)

假设我有UnitA声明由ClassA实现的InterfaceA.

类似地,我有UnitB声明由ClassB实现的InterfaceB.

两者都在其各自的初始化部分中使用Spring Container注册了它们的接口和类.

InterfaceA依赖于InterfaceB,但由于我们使用的是Spring,因此UnitA的uses子句中没有UnitB .换句话说,我们已经完成了我们的工作 - 我们已经将UnitA和UnitB分离,但我们仍然可以让InterfaceA依赖于InterfaceB.

但是,鉴于上述情况,我们需要确保UnitA和UnitB都包含在项目中,以便可以解析依赖关系.

想象一下,现在,我们开始一个新项目.该新项目使用UnitA,但开发人员没有意识到如果要使用UnitA,则还必须在项目中包含UnitB.不会出现编译器错误,因为依赖项是在运行时解决的,而不是编译时.

这就是一个问题:在应用程序部署之前,确保对UnitB的这种依赖性是否已知的正确方法是什么?

我们可以预见复杂应用程序中的情况,尽管进行了全面测试,但是可能很长时间没有执行给定的代码路径,并且在部署之前未发现此缺失的依赖关系.

我们已经实现了一个系统,其中每个接口解析调用都伴随着一个Requires调用,在启动时检查并引发异常,确保我们看到错误.但我们想知道是否有"最佳实践"或标准方法来检测此问题或以其他方式处理此问题.

补充: 这是Java和其他语言的问题吗?

java delphi dependency-injection ioc-container spring4d

7
推荐指数
2
解决办法
392
查看次数

是否有一个与char16_t一起使用的strlen()?

正如问题所说:

typedef __CHAR16_TYPE__ char16_t; 

int main(void)
{
  static char16_t test[] = u"Hello World!\n";

  printf("Length = %d", strlen(test)); // strlen equivalent for char16_t ???

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我搜索并发现只有C++解决方案.

我的编译器是GCC 4.7.

编辑:

为了澄清,我正在寻找一个能够返回计数的解决方案code points,而不是计数characters.

对于UTF-16包含字符外的字符串,这两个字符串完全不同BMP.

c unicode c11

7
推荐指数
2
解决办法
3630
查看次数