- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL; DR:
typename{...}(...)
(请注意{}
部分)调用的任何构造函数都是内部构造函数”? explicit inner constructor
吗? methods
检查方法是否是内部/外部构造函数是否正确? 1. Outer Constructor Methods
A constructor is just like any other function in Julia in that its overall behavior is defined by the combined behavior of its methods.
2. Inner Constructor Methods
An inner constructor method is much like an outer constructor method, with two differences: 1. It is declared inside the block of a type declaration, rather than outside of it like normal methods. 2. It has access to a special locally existent function called
new
that creates objects of the block's type.3. Parametric Constructors
Without any explicitly provided inner constructors, the declaration of the composite type
Point{T<:Real}
automatically provides an inner constructor,Point{T}
, for each possible typeT<:Real
, that behaves just like non-parametric default inner constructors do. It also provides a single general outer Point constructor that takes pairs of real arguments, which must be of the same type.
inner constructor methods
不能直接观察
methods
,即使
methods(Foo{Int})
可以工作,它实际上也不像“其他任何函数”,普通的通用函数不能以这种方式
methods
ed。
julia> struct Foo{T}
x::T
end
julia> methods(Foo)
# 2 methods for generic function "(::Type)":
(::Type{Foo})(x::T) where T in Main at REPL[1]:2 # outer ctor 「1」
(::Type{T})(arg) where T in Base at sysimg.jl:24 # default convertion method「2」
julia> @which Foo{Int}(1) # or methods(Foo{Int})
(::Type{Foo{T}})(x) where T in Main at REPL[1]:2 # inner ctor 「3」
julia> struct SummedArray{T<:Number,S<:Number}
data::Vector{T}
sum::S
function SummedArray(a::Vector{T}) where T
S = widen(T)
new{T,S}(a, sum(S, a))
end
end
julia> methods(SummedArray)
# 2 methods for generic function "(::Type)":
(::Type{SummedArray})(a::Array{T,1}) where T in Main at REPL[1]:5 # outer ctor「4」
(::Type{T})(arg) where T in Base at sysimg.jl:24
outer constructor
,它也调用
new
。我想这里的目的只是为了防止Julia为我们定义默认的内外构造函数对,但是在这种情况下,文档中的第二条语句仍然适用吗?这使新用户感到困惑。
julia> struct Foo{T}
x::T
(::Type{Foo{T}})(x::T) = new{T}(x)
end
julia> methods(Foo)
# 1 method for generic function "(::Type)":
(::Type{T})(arg) where T in Base at sysimg.jl:24
julia> methods(Foo{Int})
# 2 methods for generic function "(::Type)":
(::Type{Foo{T}})(x::T) where T in Main at REPL[2]:3 「5」
(::Type{T})(arg) where T in Base at sysimg.jl:24
Foo{T}(x::T) where {T} = new(x)
相距甚远,但结果似乎完全相同。
typename{...}(...)
(请注意
{}
部分)调用的任何构造函数都是内部构造函数”?
最佳答案
举例来说,假设您要定义一个代表偶数的类型:
julia> struct Even
e::Int
end
julia> Even(2)
Even(2)
Even(x)
不会:
julia> Even(3)
Even(3)
julia> Even(x) = iseven(x) ? Even(x) : throw(ArgumentError("x=$x is odd"))
Even
julia> Even(3)
Even(3)
julia> @which Even(3)
Even(e::Int64) in Main at REPL[1]:2
julia> Even(e::Int) = iseven(e) ? Even(e) : throw(ArgumentError("e=$e is odd"))
Even
julia> Even(2)
ERROR: StackOverflowError:
Stacktrace:
[1] Even(::Int64) at ./REPL[11]:0
[2] Even(::Int64) at ./REPL[11]:1 (repeats 65497 times)
Even(e)
以递归调用自身。现在,我们面临一个鸡与蛋的问题:我们想重新定义隐式构造函数,但是我们需要其他一些构造函数来调用已定义的函数。如我们所见,调用
Even(e)
不是一个可行的选择。
julia> workspace()
julia> struct Even
e::Int
Even(e::Int) = iseven(e) ? new(e) : throw(ArgumentError("e=$e is odd"))
end
julia> Even(2)
Even(2)
julia> Even(3)
ERROR: ArgumentError: e=3 is odd
..
new()
语法调用原始的隐式构造函数。该语法不适用于外部构造函数。如果尝试使用它,则会收到错误消息:
julia> Even() = new(2)
Even
julia> Even()
ERROR: UndefVarError: new not defined
..
关于constructor - 内部构造函数到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45328831/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!