我使用的是
类型/**
* @ORM\Entity
* @ORM\Table(name="product")
* @ORM\Entity(repositoryClass="App\Repository\ProductRepository")
* @ApiResource(attributes={"pagination_client_items_per_page"=true,
* "filters"={"product.search"}
* },
* collectionOperations={
* "get"={
* "method"="GET",
* "normalization_context"={"groups"={"product_gets"}} },
* "post"={
* "method"="POST",
* "denormalization_context"={"groups"={"product_post"}} },
* "product_slug"={
* "route_name"="api_product_slug",
* "swagger_context" = {
* "parameters" = {
* {
* "name" = "slug",
* "in" = "path",
* "required" = "true",
* "type" = "string"
* }
* },
* "responses" = {
* "200"={
* "description"="Product found"
* },
* "404"={
* "description"="Product not found"
* }
* },
* "summary"="Returns a Product resource for a given slug",
* }
* }
* },
* itemOperations={
* "get"={
* "method"="GET",
* "normalization_context"={"groups"={"product_get"}} },
* "put"={
* "method"="PUT",
* "denormalization_context"={"groups"={"product_put"}} },
* "delete"={
* "method"="DELETE"}
* })
* @ORM\HasLifecycleCallbacks()
*/
我的代码很多。假设我有一个变量
type
TRealFunction = reference to function(const X: extended): extended;
并尝试将var
rfcn: TRealFunction;
分配给它:
Math.ArcSec
这与Delphi 2009中的预期一样,但现在我尝试在Delphi 10.2中编译它,编译器感到不安:
rfcn := ArcSec;
似乎差异在于[dcc32 Error] Unit1.pas(42): E2010 Incompatible types: 'TRealFunction' and 'ArcSec'
在Delphi 10.2中被重载:它有ArcSec
,single
和double
种类。似乎编译器不喜欢引用这种类型的重载函数(或过程)(太相似的类型?)。
但是,如果我重新定义
extended
它编译得很好。
当然,这里有明显的解决方法:我可以定义
type
TRealFunction = function(const X: extended): extended;
或者我可以写
function ArcSec(const X: extended): extended; inline;
begin
result := Math.ArcSec(X);
end;
尽管如此,这仍然需要编写很多代码。是否有更简单的解决方法?
答案 0 :(得分:4)
这有效:
type
TRealFunction = function(const X: extended): extended;
const
rc : TRealFunction = Math.ArcSec;
type
TRealFunctionRef = reference to function(const X: Extended) : Extended;
var
rfcn: TRealFunctionRef;
begin
rfcn := rc;
...
它需要额外的类型声明,但也许值得付出努力。