我对单元测试很陌生,目前正在尝试使用Visual Studio的测试工具.
我的问题是如何在这些测试中定义关于并发行为的断言.例如,给定一个BoundedChan<T>实现有界通道的类,我如何指定测试
channel.Send不会阻止"或channel.Send将阻止直到读取一个值"编写这些断言是否有优雅的解决方案?
我最近发现了这个使用monads的名为Simple interpreter的scala示例:
object simpleInterpreter {
case class M[A](value: A) {
def bind[B](k: A => M[B]): M[B] = k(value)
def map[B](f: A => B): M[B] = bind(x => unitM(f(x)))
def flatMap[B](f: A => M[B]): M[B] = bind(f)
}
def unitM[A](a: A): M[A] = M(a)
def showM(m: M[Value]): String = m.value.toString();
type Name = String
trait Term;
case class Var(x: Name) extends Term
case class Con(n: int) extends Term
case class Add(l: Term, r: Term) extends Term …Run Code Online (Sandbox Code Playgroud) 有没有办法为值构造函数的参数定义类约束?
像这样的东西:
data Point2D = (Num a) => Point a a
Run Code Online (Sandbox Code Playgroud)
只要它们属于Num类,Point就可以接受任何参数?
是否有任何编程语言(或类型系统),您可以在其中以静态类型和类型安全的方式表达以下Python函数(不必使用强制转换,运行时检查等)?
#1:
# My function - What would its type be?
def Apply(x):
return x(x)
# Example usage
print Apply(lambda _: 42)
Run Code Online (Sandbox Code Playgroud)
#2:
white = None
black = None
def White():
for x in xrange(1, 10):
print ("White move #%s" % x)
yield black
def Black():
for x in xrange(1, 10):
print ("Black move #%s" % x)
yield white
white = White()
black = Black()
# What would the type of the iterator objects be?
for it in …Run Code Online (Sandbox Code Playgroud) 我只是想知道如何以与F#单位系统正确交互的方式编写用户定义的平方根函数(sqrt).
应该是什么样的:
let sqrt (x : float<'u ^ 2>) =
let x' = x / 1.0<'u ^ 2> // Delete unit
(x ** 0.5) * 1.0<'u> // Reassign unit
但由于非零常量不允许使用通用单位,因此不允许这样做.
有没有办法写这个功能?内置sqrt它工作正常,它有什么神奇的表现?
我有来自某个来源的物品(来自其他地方):
public class ItemsFromSource{
public ItemsFromSource(string name){
this.SourceName = name;
Items = new List<IItem>();
}
public string SourceName;
public List<IItem> Items;
}
Run Code Online (Sandbox Code Playgroud)
现在在MyClass中,我有来自多个来源的项目(从其他地方填充):
public class MyClass{
public MyClass(){
}
public List<ItemsFromSource> BunchOfItems;
}
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以一次遍历BunchOfItems中所有ItemsFromSources中的所有Items?即,像:
foreach(IItem i in BunchOfItems.AllItems()){
// do something with i
}
Run Code Online (Sandbox Code Playgroud)
而不是做
foreach(ItemsFromSource ifs in BunchOffItems){
foreach(IItem i in ifs){
//do something with i
}
}
Run Code Online (Sandbox Code Playgroud) 我目前正在编写一个小C#库来简化实现很少的物理模拟/实验.
主要组件是在SimulationForm内部运行定时器循环并从用户隐藏样板代码.实验本身将通过三种方法定义:
Init() (初始化一切)Render(Graphics g) (渲染当前模拟状态)Move(double dt)(移动实验dt几秒钟)我只是想知道让用户实现这些功能的更好选择是什么:
1)由继承表单覆盖的虚拟方法
protected virtual void Init() {}
...
Run Code Online (Sandbox Code Playgroud)
要么
2)事件
public event EventHandler<MoveSimulationEventArgs> Move = ...
...
Run Code Online (Sandbox Code Playgroud)
编辑:请注意,方法不应该是抽象的.其实,还有更和他们都不具有实施.由于许多模拟不需要它们,因此将它们放在外面通常很方便.
关于这是一个"正常形式"的酷事是你可以写
partial class frmMyExperiment : SimulationForm {
}
Run Code Online (Sandbox Code Playgroud)
并且您完全能够与设计器和所有继承的控件和设置/属性进行交互.我不想通过采用完全不同的方法来失去这些功能.
我对Haskell很新,我正在努力研究如何遍历一棵n-ary树.作为输出,我希望获得Leaf值列表(因为分支没有值),因此对于testtree,这将是:4,5
到目前为止我的定义是:
data Tree a = Leaf a | Branch [Tree a] deriving (Show)
travTree :: Tree a -> [a]
travTree (Leaf x) = [x]
travTree (Branch (x:xs)) = travTree x : travTree xs
testtree = Branch [(Leaf "4"), (Leaf "5")]
Run Code Online (Sandbox Code Playgroud)
但它给出了错误:
Couldn't match expected type `Tree a'
against inferred type `[Tree a]'
In the first argument of `travTree', namely `xs'
In the second argument of `(:)', namely `travTree xs'
In the expression: travTree x : travTree xs
Run Code Online (Sandbox Code Playgroud)
我假设这是因为xs是一个树列表,它期待一棵奇异的树.有没有办法做到这一点?我一直在尝试地图功能,顺序如下:
travTree …Run Code Online (Sandbox Code Playgroud) 示例:当使用Windows API获取Windows消息时,通常在循环中实现.
我知道有可能创建一个将无限期地进入递归的函数.我希望这会导致堆栈溢出.
无限循环错误的功能编程思维定势?
是操作系统的接口还是硬件的问题?
在我看来,功能程序/操作系统似乎不能单独运行
我在编写功能程序方面有一点经验,但这一直困扰着我.请分享您对这些问题的想法/见解
c# ×3
haskell ×2
concurrency ×1
constructor ×1
f# ×1
list ×1
loops ×1
math ×1
monads ×1
python ×1
recursion ×1
scala ×1
silverlight ×1
syntax ×1
tree ×1
type-theory ×1
unit-testing ×1