我正在创建一些参数化类C [T],我想对类型T的特性做出一些要求,以便能够成为我的类的参数.如果我只想说T继承自traits或class(就像我们使用Ordering一样),那就简单了.但我希望它也能实现一些功能.
例如,我已经看到许多预定义类型实现MinValue和MaxValue,我希望我的类型T也实现它们.我收到了一些建议来定义隐式函数.但我不希望所有用户在已经实现的情况下被迫为这些实现此功能.我也可以在我的代码中实现它们,但它似乎只是一个糟糕的快速修复.
例如,在定义堆时,我想允许用户构造一个空堆.在这些情况下,我想用T类型可能具有的最小值来实现值.显然这段代码不起作用.
class Heap[T](val value:T,val heaps:List[Heap[T]]){
def this()=this(T.MinValue,List())
}
Run Code Online (Sandbox Code Playgroud)
我也很想收到关于真正好的在线Scala 2.8参考资料的一些建议.
在我们拥有的每个ADO.NET连接器上AddWithValue,因此添加参数是轻而易举的.令我感到惊讶的是,这种过载是不可用的,IDataParameterCollection甚至是不可用的DbParameterCollection.在编写独立于供应商的层(针对接口编码)时,如何以最小的麻烦(来自调用方和被调用方)实现相同的目标?
现在我做:
public void Execute(string query, Action<IDbCommand> parameterizer)
Execute(query, cmd =>
{
var param = cmd.CreateParameter();
param.ParameterName = "user_id";
param.Value = 1;
cmd.Parameters.Add(param);
param = cmd.CreateParameter();
param.ParameterName = "mf";
param.Value = "6CE71037";
cmd.Parameters.Add(param);
});
Run Code Online (Sandbox Code Playgroud)
那是太多的工作不是吗.否则我可以更改签名:
public void Execute(string query, IEnumerable<KeyValuePair<string, object>> parameters)
var parameters = new Dictionary<string, object>
{ { "user_id", 1 }, { "mf", "6CE71037" } };
Execute(query, parameters);
Run Code Online (Sandbox Code Playgroud)
这种方法要求我在被调用者(Execute方法)中编写另一个循环.这几乎是我想要的,但只是看看是否有更简洁的方法.比如这样:
public void Execute(string query, Action<IDataParameterCollection> parameterizer)
Execute(query, p =>
{
p["user_id"] …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我的数据拟合到 beta 二项式分布并估计 alpha 和 beta 形状参数。对于此分布,先验值取自 beta 分布。Python 没有用于 beta-binomial 的 fit 函数,但它有用于 beta 的函数。python beta 拟合和 R beta 二项式拟合很接近,但系统性地关闭。
回复:
library("VGAM")
x = c(222,909,918,814,970,346,746,419,610,737,201,865,573,188,450,229,629,708,250,508)
y = c(2,18,45,11,41,38,22,7,40,24,34,21,49,35,31,44,20,28,39,17)
fit=vglm(cbind(y, x) ~ 1, betabinomialff, trace = TRUE)
Coef(fit)
shape1 shape2
1.736093 26.870768
Run Code Online (Sandbox Code Playgroud)
Python:
import scipy.stats
import numpy as np
x = np.array([222,909,918,814,970,346,746,419,610,737,201,865,573,188,450,229,629,708,250,508], dtype=float)
y = np.array([2,18,45,11,41,38,22,7,40,24,34,21,49,35,31,44,20,28,39,17])
scipy.stats.beta.fit((y)/(x+y), floc=0, fscale=1)
(1.5806623978910086, 24.031893492546242, 0, 1)
Run Code Online (Sandbox Code Playgroud)
我已经这样做了很多次,似乎 python 系统地比 R 结果低一点。我想知道这是我的输入错误还是计算方式的不同?
我正在尝试将两个变量传递到 jq 查询中。
我的 JSON
{
"AlbumTitle": "Name Of Album",
"AlbumLink": "/album/link/id/1/album-name/",
"ArtistName": "Artist Name",
"Date": "September 14, 2018"
},
{
"AlbumTitle": "Name Of Album",
"AlbumLink": "/album/link/id/2/album-name/",
"ArtistName": "Artist Name",
"Date": "September 13, 2018"
}
Run Code Online (Sandbox Code Playgroud)
我有两个变量作为日期和艺术家姓名,我试图根据变量拉回 ArtistLink。
我用的是下面的JQ线。
cat test.json | jq -n -r --arg TESTDATE "$TESTDATE" '.. | objects | {select(.Date == '"$TESTDATE"')} | select(.ArtistName | contains('"$test1"')) | .AlbumLink'
Run Code Online (Sandbox Code Playgroud)
我收到错误
"jq: error: syntax error, unexpected '(', expecting '}' (Unix shell quoting issues?) at <top-level>, line 1:
.. | objects …Run Code Online (Sandbox Code Playgroud) 我是斯卡拉的新人.我需要得到一个类的参数化.我怎样才能做到这一点 ?这个类看起来像这样:
class OutPort[T](name: Symbol, owner: Component) extends Port[T](name)
Run Code Online (Sandbox Code Playgroud)
我在LinkedList中获得了许多OutPorts.在另一个类中,我想获得OutPort实例的参数化,但参数化是任意的,并且isInstanceOf的解决方案不具备.是否有一种特殊的方法用于此目的,我还没有涵盖呢?
Lunatikz
我已经阅读了一些关于Manifest和擦除避免技术的内容,这些技术允许Scala执行"new Array [Array [T]]"之类的操作,但我对这个有点难过....
我有一种方法可以将数组中的一堆行列表为电子表格.例如,想象一下像这样的2D数组:
11, 5, 4
8, 3, 7
2, 1, 4
Run Code Online (Sandbox Code Playgroud)
我写了一个方法,总结了该数组的列,并吐出了像[21,9,15]这样的一维数组
我想将它泛化为Ints(比如Doubles或Floats),当我添加参数和清单时,我得到编译错误.
这是代码
def sumGrid[T](grid: Array[Array[T]])(implicit m: ClassManifest[T]): Array[T] = {
val sum = new Array[T](grid(0).size)
for(i <- 0 until grid.size) {
for(j <- 0 until grid(0).size) {
sum(j) = sum(j) + grid(i)(j)
}
}
sum
}
Run Code Online (Sandbox Code Playgroud)
这是编译错误:
[ERROR] ...scala/euler/GridOperations.scala:126: error: type mismatch;
[INFO] found : T
[INFO] required: String
[INFO] sum(j) = sum(j) + grid(i)(j)
[INFO] ^
[ERROR] one error found
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?为什么String"必需"?
在我的测试代码中,我有以下内容:
@pytest.mark.parametrize(("title", "description", 'site'), [
("abc", "this is a proper description","minecraft.net"),
("proper title","short","minecraft.net"),
("proper title", "this is a proper description","bol"),
("","this is a proper description","minecraft.net"),
("proper title","","minecraft.net"),
("proper title","this is a proper description",""),
("proper title","this is a proper description","ftp://myftp.nl")
])
@ae_test(loggedin = True)
def test_mod_model_create_validation(title, description,site):
... testing code ....
Run Code Online (Sandbox Code Playgroud)
所以,参数化函数试图参数化我自己的@ae_test装饰器返回的函数,如下所示:
def ae_test(prob=1.00,loggedin=False,is_admin=False):
def create_wrapper(func):
def run_test(*args,**kwargs):
... test setup code ...
func(*args,**kwargs)
... test teardown code ...
Run Code Online (Sandbox Code Playgroud)
到目前为止,这对我的所有测试都有效,但参数化函数抱怨:
ValueError: <function run_test at 0x1029b55f0> has no argument 'title' …Run Code Online (Sandbox Code Playgroud)