问题描述
我在Delphi中对辅助程序的重新声明有疑问。
HelperDecl.pas
unit HelperDecl;
interface
type
TCustomField = Word;
TCustomFieldHelper = record helper for TCustomField
public
procedure SampleMethod();
end;
implementation
procedure TCustomFieldHelper.SampleMethod();
begin
end;
end.
ScopeTest.pas
unit ScopeTest;
interface
uses HelperDecl;
type
rec = record
art: TCustomField;
end;
implementation
uses System.SysUtils;
procedure DoScopetest();
var
a: TCustomField;
r: rec;
begin
a := r.art;
r.art.SampleMethod(); //Here has the compiler no problems
a.SampleMethod(); //Undeclared identifier 'SampleMethod'
end;
end.
但是我只为我的本地数据类型定义了一个帮助器(是的,它是从Word派生的)! SysUtils
中的帮助程序是Word
的帮助程序,而不是我的自定义数据类型!放开我的数据类型!
当我将uses System.SysUtils;
移到uses HelperDecl;
之前时,它可以工作。但是我想有一个任意单位的使用顺序。
解决方法
问题在于Word
和TCustomField
是同一类型,并且不可能有两个相同类型的记录助手。
如果您改为通过{em> distinct 类型让type
TCustomField = type Word;
起作用,
import React from 'react';
import {Route,BrowserRouter} from 'react-router-dom'
import {connect} from 'react-redux'
import Home from './components/home'
import Data from './components/data'
import Nav from './components/nav'
import './App.css';
function App(props) {
const data = this.props.data //error in this line
return (
<div className="App">
<BrowserRouter>
<Nav />
<Route path='/' exact component={Home} />
<Route path='/data' component={Data} />
</BrowserRouter>
</div>
);
}
const mapStateToProps=(state)=>{
return {
data : state.data
}
}
export default connect(mapStateToProps)(App);
,
Delphi仅支持单个助手。如果您在范围中有多个助手,则使用距离最近的助手。
您可以定义多个助手并将其与单个类型相关联。 但是,只有零个或一个助手适用于 源代码。在最接近的范围内定义的帮助程序将适用。类 或记录帮助程序范围以常规的Delphi方式确定(对于 例如,在单位的uses子句中从右到左)。