假设我在Julia中的抽象类型A上定义了一个函数:
abstract A
function mysum(a::A)
a.x + a.y
end
Run Code Online (Sandbox Code Playgroud)
隐式地,任何子类型都应该具有字段x和y,以使此函数起作用.因此,在A上定义的函数是为子类型设置的要求.这些功能可以在任何地方编写,人们可以想象这样的情况,即功能要复杂得多,而且要求更难以发现. 有没有什么方法可以声明一个抽象类型的子类型除了函数隐式之外必须具有的类型?
这似乎与朱莉娅#6975有关,但如果与此无关,那么有人可以澄清差异.
最后,为什么有人想要使用类型联合而不是抽象类型. 抽象类型更灵活,可扩展,类型联合是固定的.例如
为什么这个:
type A
x
end
type B
x
end
typealias C Union{A,B}
Run Code Online (Sandbox Code Playgroud)
而不是这个:
abstract C
type A <: C
x
end
type B <: C
x
end
Run Code Online (Sandbox Code Playgroud) 根据朱莉娅手册的"性能提示"部分,不建议多次发送疯狂.我遇到了一种情况,我似乎需要为我定义的类型提供3个参数.这与我关于仅为2种可能类型使用1个参数的问题有关.我意识到我可以通过简单地使用另一个参数来解决那里出现的困难但是我的类型看起来像
type mytype{R<:Real, S<:Any, T<:Any}
x::Matrix{R}
y::Dict{Int64, Vector{S}}
z::Dict{T, Vector{Int64}}
end
Run Code Online (Sandbox Code Playgroud)
这是一个不可取的性能中断,有几个参数可以发送.mytype上的函数然后将调度3个参数,函数参数是否正确?
我正在创建一个包含6种不同问题类型的简单数学程序.我希望程序随机显示6种类型中的一种,但有些问题应该更频繁地出现.我使用加权数组,但在从加权数组中选择问题类型后,我无法在if语句中使用10个或更多"或"命令来确定问题类型.这是一个简化版本:
//shuffle array of 10 integers to get a random value
var rand_10 = [0,1,2,3,4,5,6,7,8,9];
fisherYates(rand_10);
//Set weightedProb
weightedProb[0] = probType[0];
weightedProb[1] = probType[0];
weightedProb[2] = probType[0];
.
.
.
weightedProb[8] = probType[0];
weightedProb[9] = probType[1];
theProblem = weightedProb[rand_10[0]];
if(rand_10[0] == 0 || rand_10[0] == 1 || rand_10[0] == 2 || rand_10[0] == 3 ||rand_10[0] == 4||rand_10[0] == 5||rand_10[0] == 6||rand_10[0] == 7||rand_10[0] == 8){
//do something
}else if(rand_10[0] ==9){
//do something else
}
Run Code Online (Sandbox Code Playgroud) javascript if-statement logical-operators conditional-statements logical-or
我们如何将多个输入传递给组合内部的函数?
const scaleLinear = R.curry((domain,range,t)=>{
let [a,b] = domain,
[c,d] = range;
return (1 - (t-a)/(b-a))*c + (t-a)(b-a)*d;
//getDomain: arr1 -> [xmin,xmax]
//getRange: arr2 -> [ymin,ymax]
const scale = R.compose(scaleLinear, getDomain, getRange);
Run Code Online (Sandbox Code Playgroud)
显然上面的方法不起作用,但是有什么替代方法可以让我最终传入 2 条数据(arr1,arr2),并得到适当的比例?
javascript ×2
julia ×2
if-statement ×1
inheritance ×1
logical-or ×1
performance ×1
ramda.js ×1