我正在使用一段具有广泛/深层案例类层次结构的代码。对于单元测试,我想在类中填充“随机数据”,以便能够更改我关心的字段的数据?
例:
case class Foo(bar: Bar, name: String, value: Int)
case class Bar(baz: Baz, price: Double)
case class Baz(thing: String)
Run Code Online (Sandbox Code Playgroud)
所以像这样:
val randomFoo = GenerateRandomData(Foo)
randomFoo.bar.baz = Baz("custom for testing")
Run Code Online (Sandbox Code Playgroud)
我听说过ScalaCheck,并Shapeless和Scalacheck-shapeless与他们提供某种形式的随机数据生成,但没有与定制看来的。
我目前正在使用,ScalaMock但这会扩展null字段并破坏“其他”测试的可测试性。我在.Net中使用了类似Auto Fixture的工具,并且想知道Scala中是否有类似的工具。
我有一个div可以显示3个图像(在后台),每个图像指示一些变量的"状态" :即,部分,全部和无.对于这些状态中的每一个,我都有图像:partial.gif,full.gif和none.gif(即,这些是该div的背景图像)
需要:循环队列像切换效果,用于按此顺序更改图像partial - > full - > none - > partial
因此,如果当前图像是'partial.gif'并且用户单击div,则背景图像将更改为序列中的下一个图像,即full.gif(如果它当前是full.gif,则会更改为none.gif并且到partial.gif等).
天真的解决方案:有一堆if/else或switch-case并检查当前的(图像),然后根据数组查找决定下一个.这是最好的方式吗?我可以以某种方式利用jQuery的切换功能吗?
(PS:它不必局限于图像,但也可以用于不同的背景颜色序列等,我想知道这是一种很好的'通用'方式,即,例子可能是特定的背景图像,但如果我改变了部分代码的背景颜色或字体,它仍然可以工作.我不希望它纯粹是通用的,但只是足够容易修改其他属性.如果没有,那也没关系. 只是一个想法 :)
我的 VBA 代码中的 Scripting.Dictionary 对象正面临这个奇怪的问题。我希望继续遍历字典的总长度。我可能会在循环内向字典中添加更多项目,因此字典的大小可以动态变化,可以这么说。似乎它只迭代字典中最初的元素而不是新元素!
这是代码:
'Recursively continue to get all dependencies
numberOfPreReqsToIterate = preReqGraph.Count - 1
For preReqCount = 0 To numberOfPreReqsToIterate
listOfPreReqs = preReqGraph.items
rowNumberOfDependency = Application.WorksheetFunction.Match(listOfPreReqs(preReqCount), Range("requirementNumber"), 0)
listOfPreReqsForCurrentPreReq = Application.WorksheetFunction.Index(Range("preReqList"), rowNumberOfDependency)
If listOfPreReqsForCurrentPreReq <> "" Then
preReqs = Split(listOfPreReqsForCurrentPreReq, ",")
'Add each prereq to dictionary
For i = 0 To UBound(preReqs)
'If prereq already exists implies cycle in graph
If preReqGraph.Exists(Trim(preReqs(i))) Then
MsgBox ("YOU HAVE A CYCLE IN PREREQUISTE SPECIFICATION!")
End
End If
'If not then …Run Code Online (Sandbox Code Playgroud) 我不知道这样的事情是否可行,或者在哪里寻找可以帮助解决这个问题的事情 - 因此寻求一些指针的问题.
这是我的情况:我有一个活动图表的矩阵表示.矩阵中的每个条目表示活动对另一个活动的相对影响,即('系统'中有'n'个活动.矩阵只是这些活动的'nxn'表示,条目意味着相对影响)
(这些数字是信息性的,可以是任何数字,但只是简化为0-3).
现在给出这个矩阵,我将对图形进行描述.我想做的是随着时间的推移"模拟"图形,即,从时间开始,t=0我希望能够模拟"系统"随时间的变化.我肯定会在图表中有周期(非常可能),因此这里基于时间步的模拟很合适.
我不知道有任何可以帮助我理解循环图随时间变化的影响.我只知道一个这样的解决方案,即使用系统动力学并将此图转换为库存/流程图,然后模拟它以获得我想要的.实际上,图(上图)是因果循环图.
问题:我真的很想从矩阵表示转变为可模拟的系统而不强迫某人理解系统动力学(基本上在后台做一些事情).
问题是:系统动力学是实现我正在寻找的东西的唯一途径吗?我该如何系统地将图形的任意矩阵表示转换为系统动态模型?
如果不是系统动力学,那么我应该考虑哪些其他方法来解决这样的问题?具有相应指针的算法名称将被赞赏!
图表的示例表示:
假设我有3个活动的以下矩阵:行:'原因'的节点(外向箭头)列:节点"受影响"(传入箭头)
__| A | B | C | A | - | 3 | 2 | B | 1 | - |-2 | C |-1 | 0 | - |
如果我'开始'有10个单位的图表(模拟)A我想看看系统如何随着时间的推移而给出矩阵表示中的相对影响.
更新: '模拟'将在一系列时间步骤中,即,在时间t = 0时,节点A的值为10,B将乘以3或加3,这取决于某人想要如何指定'影响".随着时间节点的累计值可以在图形绘制,显示的值是如何进展的趋势.
给定一个 BST(可能平衡也可能不平衡),如何随机均匀地返回“任何”节点?一个限制是您不能使用外部索引数据结构。您必须以每个节点被访问的机会均等的方式遍历树。
这个问题让我困惑了好久。如果我们确实可以使用外部哈希表/指针,我们可以对它们进行随机化并返回相应的节点。但是,我的同事提出了一个相当复杂的问题变体,其中不能使用额外的数据结构。
d并遍历大多数d节点以返回节点(如果它是叶子则停止)也不会生成均匀分布。更新:您也不能进行中序遍历并将结果存储在数组中。
如何实现这样的遍历?
背景语境:
在数学上,我可以看到需要关联性来保持简单而不依赖于顺序。我遇到的示例monad 的所有实现(博客、书籍等)似乎总是有效。似乎只是拥有map, flatMap(Scala) 或fmap, >>=(Haskell) 的行为使事情成为一个工作单子。
据我所知,这并不完全正确,但无法提出一个反例,通过失败案例展示法律的“需要”。
Wadler 的论文提到了错误实现的可能性:
该哈斯克尔维基提到了以下情况:
第三定律是 的一种结合律
>>=。遵守这三个定律可以确保使用 monad 的 do-notation 的语义是一致的。任何满足三个 monad 定律的具有返回和绑定运算符的类型构造函数都是一个 monad。在 Haskell 中,编译器不会检查法则是否适用于 Monad 类的每个实例。程序员有责任确保他们创建的任何 Monad 实例满足 monad 定律。
问题):
do-notation 有何影响?出于好奇,我想直接调用React 函数组件;就像常规函数一样。然而,React 抱怨道:
Invalid hook call. Hooks can only be called inside of the body of a function component.
Run Code Online (Sandbox Code Playgroud)
React 如何知道这一点?这是示例代码:
const T = () => {
useEffect(() => console.log("effect"));
return (
<>
<div> hello </div>
</>
);
};
Run Code Online (Sandbox Code Playgroud)
useEffect我这样提取:
const T = (func = useEffect) => () => {
func(() => console.log("effect"));
return (
<>
<div> hello </div>
</>
);
};
Run Code Online (Sandbox Code Playgroud)
然后通过以下方式重新触发它:T()()这不起作用。但T(f=>f())()确实有效。
每个钩子都是如此吗?还是仅针对 React 提供的钩子?创建任意自定义挂钩(不依赖于现有的 React 挂钩)也会导致相同的错误吗?React 到底发生了什么来确定这一点,为什么 …
我有一组需要从DAOFactory获取的DAO(数据访问对象)(使用工厂方法模式).
现在我们有了DAO必须始终用参数初始化的情况,例如:(带字符串参数)
MyDataDAO myDAO = new myDAO("myProject", "myProjectWallName");
现在,拥有一堆DAO需要我们重构(使用工厂模式),这里是冲突的力量:
那么应该如何为使用工厂实例化的类设计一个"良好"的接口,即在这方面要遵循的最佳实践.到目前为止,我总是遇到非参数化构造函数的情况,我觉得有一个有效的需要/原因来获得参数.我个人觉得只有一个默认的构造函数并通过setter-getters设置所有东西是很糟糕的,打败了目前存在的构造函数来解决!
困惑...
所以我知道我可能有一个空List(特别是ArrayList).现在对它进行简单检查就像在我检查它时实际抛出NullPointerException一样.这个让我难过,因为我总是成功使用它,但我确信我错过了一些东西:
public class MyPost {
private int id;
private List<Label> labels;
public MyPost(int id){ this.id = id }
//getter setters for both plus this added method:
public void addLabel(Label aLabel)
{
if(labels == null)
labels = new ArrayList<Label>();
labels.add(aLabel);
}
}
Run Code Online (Sandbox Code Playgroud)
现在在我的代码的另一部分,我正在迭代客户端发送的ID列表.为简单起见,假设循环变量'i'正在提供id
MyPost aPost = new MyPost(i);
Run Code Online (Sandbox Code Playgroud)
在我的逻辑中,我可能会也可能不会在帖子中添加标签.所以在继续之前,我检查是否存在这样的标签:
if(aPost.getLabels()!=null)
//process labels
Run Code Online (Sandbox Code Playgroud)
现在,如果没有添加任何标签列表,则抛出空指针异常!但这正是我想要检查的,我仍然得到一个NPE!
我知道aPost.getLabels()如果没有添加任何内容则为null.但这种比较似乎失败了,并引发了一场NPE.如何解决这个问题?只是让我难过!
更新: 这是获取标签代码.只是一个微不足道的吸气鬼......
public List<Label> getLabels() { return labels;}
Run Code Online (Sandbox Code Playgroud)
我们注意到以前忽略过的东西.我确定java用来"短路"它的if条件,即在OR条件下,如果第一个条件被评估为true,它将不会检查第二个条件(如果第一个条件被评估为false,则类似于AND的短路) ).我不完全确定这是否是原因,但这里是if子句:
if(aPost.getLabels()!=null || !aPost.getLabels().isEmpty())
//process labels
Run Code Online (Sandbox Code Playgroud)
如果列表确实为空,则短路不应该评估第二个条件,正确吗?似乎可能是原因,但我们仍在测试它.现在只是预感......
我们的Web应用程序中有一些遗留的非骨干代码.虽然我们附加views到现有的DOM元素,仍然有一些尚未重构的代码删除某些DOM元素,即删除调用不通过视图但更像是jQuery调用$('#domID').remove();
我有一种唠叨的感觉,骨干视图可能像僵尸一样挂着,但我没有办法看到它?这有害吗?我们是否应该优先重构并通过视图和调用view.remove()以及view.unbind()正确删除所有删除操作?
如果独立删除DOM节点,视图是否会被垃圾收集?我想如果不是,它是否与某些事件有关,但如果不是这样呢?
我有一个Date内部使用的自定义类:
case class Date(month: Int, day: Int, year: Year)
Run Code Online (Sandbox Code Playgroud)
并这样使用:
case class Person(dateOfBirth: Date)
Run Code Online (Sandbox Code Playgroud)
但是,当我为我生成Json时,Person(Date(12, 20, 1990))会得到类似以下内容:
{
"dateOfBirth": {
"month": 12,
"day": 20,
"year": 1990
}
}
Run Code Online (Sandbox Code Playgroud)
我想要得到的是这样的:
{ "dateOfBirth": "12-20-2990" } // or any custom format
Run Code Online (Sandbox Code Playgroud)
是否可以“平铺”自定义案例类,以便将它们仅当作值而不是被扩展?我已经尝试过类似的事情,它导致了StackOverflowError:
implicit val dateEncoder: Encoder[Date] = (date: Date) => {
Json.fromString(s"${date.month}-${date.dayOfMonth}-${date.year}")
}
Run Code Online (Sandbox Code Playgroud)
更新:此错误似乎与编码器无关-添加此编码器时恰好会触发该错误,但不会迫使我得出结论,这不是正确的编码方式。我已经接受了答案,因为它可以正确回答“提问”的问题。
这是在添加日期一之后“失败”的编码器:
implicit val myEncoder: Encoder[Vector[MyCaseClass]] = (my: Vector[MyCaseClass]) => {
if (my.nonEmpty) my.asJson else Json.Null
}
Run Code Online (Sandbox Code Playgroud)
我可以将其编码为,Option[Vector[MyCaseClass]]但是我正在尝试直接对Vector进行编码,以了解会发生什么...
algorithm ×2
java ×2
javascript ×2
scala ×2
backbone.js ×1
circe ×1
css ×1
excel ×1
graph ×1
haskell ×1
jquery ×1
oop ×1
probability ×1
reactjs ×1
scalacheck ×1
spring ×1
traversal ×1
unit-testing ×1
vba ×1