什么是无边表达的潜在替代表示(例如使用箭头,镜头,Haskell习语,做语法),这些表达式可以更像简单的英语?
这是一个简单的例子:
qNameIs :: String -> QName -> Bool
qNameIs = (. qName) . (==)
Run Code Online (Sandbox Code Playgroud)
QName 来自的记录 Text.Xml
什么可能相当于qNameIs但不是有意义的表达?理想情况下,那些会显示第一个参数将被传递给(==)结果的结果将被评估,结果qName应用于该表达式的第二个参数?
我正在使用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) 我正在为分散式模块注册寻找一个好的解决方案.
我不想要一个使用项目所有模块单元的单元,但我宁愿让模块单元自己注册.
我能想到的唯一解决方案就是依赖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部分的警告,我知道我必须避免在其中引发异常.
我有
我有问题 当我点击按钮时,行点击事件也会执行,但我不想要这种行为.我只想点击按钮执行,没有行点击.
我正在使用SQL Advantage,需要知道SQL是什么来识别与表关联的触发器.我没有选择使用其他工具,所以老式的SQL解决方案是理想的答案.
如果我理解正确,请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) 我试图找到一种安全/确定的方法来释放封装在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)
这个解决方案是安全的还是我忽略了一个更好的解决方案?
我经常将一个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组件中的缺陷:
这将是一个难以描述的问题,但是这里有.
我们正在使用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和其他语言的问题吗?
正如问题所说:
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.
delphi ×6
delphi-2007 ×3
haskell ×2
buttonclick ×1
c ×1
c11 ×1
com ×1
comments ×1
delphi-units ×1
delphi-xe3 ×1
detect ×1
events ×1
finalization ×1
java ×1
javascript ×1
jquery ×1
layout ×1
module ×1
onclick ×1
pointfree ×1
spring4d ×1
sql ×1
stream ×1
sybase ×1
tframe ×1
timage ×1
triggers ×1
unicode ×1
vcl ×1