小编Geo*_*off的帖子

F#中单例判别联合的简明模式匹配

假设我有以下单一案例歧视联盟:

type OrderId = OrderId of string
Run Code Online (Sandbox Code Playgroud)

在某些时候我需要实际的字符串.我发现它的提取方式是:

let id = match orderId with OrderId x -> x
Run Code Online (Sandbox Code Playgroud)

这样做有更简洁的方法吗?

我知道我的使用是一个特殊的情况,并且匹配是有意义的,以确保你已经涵盖了可能性,只是想知道是否有办法做一些事情,如:

let OrderId id = orderId
Run Code Online (Sandbox Code Playgroud)

f# pattern-matching discriminated-union

29
推荐指数
2
解决办法
2057
查看次数

使用MVVM通过ViewModel属性冒泡INotifyPropertyChanged事件的好方法是什么?

我试图找出在我的ModelView中从嵌套属性冒泡PropertyChanged事件的最佳方法.说我有我的ModelView PersonModelView有一个属性PersonModelView.Address.Address反过来有一个属性City.当我City在我的视图中绑定时,我会做类似的事情{Binding Address.City}.

我的问题是,即使Address器具INotifyPropertyChanged,绑定不会得到更新,因为它处理PropertyChangedPersonModelView,没有 Address.我认为我有两个选择:(1)将绑定源(或更改DataContext)更改为Address属性或(2)在对象上设置PersonModelView句柄并使用类似的内容重新调整它自己.PropertyChangedAddressPropertyChangedAddress.City

你们是怎么解决这个问题的?(我在mo使用MVVM light toolkit,但我对任何方法感兴趣)

c# wpf mvvm mvvm-light

16
推荐指数
1
解决办法
7527
查看次数

Akka actorFor vs传递ActorRef

我正在学习阿卡,我试图找出如何让参与者互相交谈(让我们称他们AB).这不是一个请求/响应情景中,AB在任何时候都彼此发送消息.

目前我有两个兄弟姐妹演员在两个方向上互相传递信息.他们都是直接创建的ActorSystem.我最初通过ActorRefA进入的构造B.但我不能传递ActorRefB到的构造A,因为它不存在,即我不能用这个方法循环引用.

我一直在阅读actorFor,这会让我用它的路径查找一个演员.但是,我对这种设置不满意,因为如果路径发生变化,编译器就不会捕获它.

另一种选择,考虑到每一个演员可以访问到它的父,是从传递信息A,并B到父,然后让家长将消息传递回落到AB.但是这会将父节点与来回传递的消息类型联系起来.

人们使用什么策略让演员彼此了解?我是否因为通过路径查找演员而过于谨慎?

scala akka

16
推荐指数
1
解决办法
5420
查看次数

结合F#异步和计算表达式

假设我想Optionasync工作流程中返回一段时间:

let run = 
    async {
        let! x = doAsyncThing
        let! y = doNextAsyncThing x
        match y with
        | None -> return None
        | Some z -> return Some <| f z
    }
Run Code Online (Sandbox Code Playgroud)

理想情况下,我会使用FSharpx中的可能计算表达式同时作为异步来避免这样做match.我可以创建一个自定义构建器,但是有没有办法一般地组合两个计算表达式?它可能看起来像这样:

let run = 
    async {
        let! x = doAsyncThing
        let! y = doNextAsyncThing x
        return! f y
    }
Run Code Online (Sandbox Code Playgroud)

monads f# asynchronous monad-transformers computation-expression

16
推荐指数
2
解决办法
2304
查看次数

ListCollectionView泄漏内存吗?

我一直在研究如何避免因INotifyCollectionChanged视图模型对事件的强引用而导致的内存泄漏.我正在玩一个ListCollectionView用来查看是否会为我处理它.我认为以下是泄漏记忆,我做错了什么?

var stuff = new ObservableCollection<string>();
while (true)
{
    var result = new ListCollectionView(stuff);
    // Just to keep make sure that the memory I'm seeing 
    // isn't waiting to be GC'd
    GC.Collect(); 
}
Run Code Online (Sandbox Code Playgroud)

c# wpf memory-leaks mvvm listcollectionview

11
推荐指数
2
解决办法
2244
查看次数

重构时是否应删除F#类型的注释?

如果我在任何地方使用函数之前编写函数,我发现在其参数中添加类型注释很有用.这意味着我可以自动完成其值,并且(特别是作为F#newbie)不会被意外的类型推断混淆.

但是,一旦函数完成,我很想删除参数的类型注释,因为它们很难看.这听起来像是一件合理的事吗?

我希望它可能取决于我所说的功能.例如,它可能对私有函数有意义,但对公共函数则没有意义.

refactoring f# type-inference

9
推荐指数
1
解决办法
301
查看次数

Scala镜头用于收集参数

使用镜头更新集合中元素的最佳方法是什么?例如:

case class Ingredient(name: String, quantity: Int)
case class Recipe(val ingredients: List[Ingredient])
Run Code Online (Sandbox Code Playgroud)

如果我想使用镜片来创建一个单一成分的数量改变的新配方,那么最好的方法是什么?

我试过的方法是动态制作镜头:Lens[List[Ingredient], Ingredient].虽然这感觉有点笨重:

case class Recipe(val ingredients: List[Ingredient]) {
  import Recipe._
  def changeIngredientQuantity(ingredientName: String, newQuantity: Int) = {
    val lens = ingredientsLens >=> ingredientLens(ingredientName) >=> Ingredient.quantityLens
    lens.set(this, newQuantity)
  }
}

object Recipe {
  val ingredientsLens = Lens.lensu[Recipe, List[Ingredient]](
    (r, i) => r.copy(ingredients = i),
    r => r.ingredients
  )
  def ingredientLens(name: String) = Lens.lensu[List[Ingredient], Ingredient](
    (is, i) => is.map (x => if (x.name == name) i else …
Run Code Online (Sandbox Code Playgroud)

functional-programming scala scalaz lenses

5
推荐指数
2
解决办法
1648
查看次数