小编Roh*_*rma的帖子

使用 FnMut 了解 Iter

由于Iter 的“所有”fn 采用 FnMut 类型,是否可以在检查条件和短路时更新元素?虽然我知道这是不应该的,但是是什么阻止它更新值呢?

fn main() {
   let a = ["as", "zz"];

    let mut iter = a.iter();
    iter.all(|& (mut x)| {x = "cc"; true});

    for z in a.iter(){
        println!("{z}");
    }
}
Run Code Online (Sandbox Code Playgroud)

上面打印

as
zz
Run Code Online (Sandbox Code Playgroud)

在上述情况下,为什么设置“x = cc”不起作用?或者为什么 Iter “all” 方法采用 FnMut 类型的 F 而不是 Fn 当它不应该变异而只验证条件时

rust

3
推荐指数
1
解决办法
141
查看次数

Rust String AsRef<T> 不会自动借用 [u8]

Rust String 实现了AsRef<str>AsRef<[u8]>

但是为什么 Rust 正确地允许将 String 借用为&str而不是&[u8],即使我们提供了显式类型注释提示?

let s = String::from("hello");
let item: &str = &s; // Works
let item2: &[u8] = &s; // Fails
Run Code Online (Sandbox Code Playgroud)

当然显式调用是有效的,但好奇为什么上面不起作用

let item2: &[u8] = s.as_ref();
Run Code Online (Sandbox Code Playgroud)

rust

3
推荐指数
1
解决办法
219
查看次数

具有递归和列表理解的素数生成器

我是Haskell编程的新手,无法理解下面的列表理解是如何扩展的.

primes = sieve [2..] 
sieve (p:xs) = p : sieve [x | x <-xs, x `mod` p /= 0]
Run Code Online (Sandbox Code Playgroud)

有人可以纠正sieve扩展如何工作:

  • 因为我们是模式匹配sieve,p会关联2x来自[3..].
  • 接下来,在列表理解中x<-3,但是3当没有短路时我们怎样才能调用筛子.

其他我不明白的是递归如何在这里起作用.

我认为很清楚,如果能够在前几个数字的情况下一次扩展上述一步,那就说直到5.

recursion primes haskell list-comprehension sieve

2
推荐指数
1
解决办法
1580
查看次数

列表不规则地优化

如果我执行以下代码并且不按控制台上的任何键

class Program
{
    static void Main(string[] args)
    {
        List<Test> list = new List<Test>(1) {new Test()};
        Console.ReadKey();
        GC.KeepAlive(list);
        var x = list[0];
        Console.WriteLine((x.ToString()));
    }
}

class Test
{
    public override string ToString()
    {
        return "Empty object";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在windbg中分析数组时,我看到列表中没有包含我添加的测试对象. 在此输入图像描述

第0位的元素是我不确定的其他东西

在此输入图像描述

但是,如果我像我这样添加一个字符串属性到我的Test类

class Test
{
    public string Name = "Rohit";

    public override string ToString()
    {
        return "Empty object";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后这次windbg揭示了这个对象

在此输入图像描述 在此输入图像描述

有人可以帮忙解释一下发生了什么吗?我在x64 windows 7上使用Visual Studio 2015(.net 4兼容模式)测试了上述内容

旁白:即使我要求列表大小为一(对于我的测试),我看到它的默认大小为128.所以基本上初始容量是基于一些启发式等?

.net c# windbg

2
推荐指数
1
解决办法
250
查看次数

使用foldr获取符合条件的第一个项目

我正在进行自我练习,并想知道是否有办法在列表中找到符合某个标准的左边第一个项目foldr?我希望在找到第一个项目时停止递归(我知道我可以结合使用take),但我很想知道是否可以使用它foldr

firstFind (\x -> x > 1000) [] xs 
Run Code Online (Sandbox Code Playgroud)

haskell fold

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

在Prism模块内部时,AutowireViewModel不起作用

我确信我在这里做错了,但是当我在模块中定义的视图中设置AutowireViewModel附加属性时,它无法自动连接视图模型.我没有看到实例化的视图模型.我的示例项目位于github(见下文)

<UserControl x:Class="MainModule.ToolbarWindow"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mvvm="clr-namespace:Microsoft.Practices.Prism.Mvvm;assembly=Microsoft.Practices.Prism.Mvvm.Desktop"
         mvvm:ViewModelLocator.AutoWireViewModel="True"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<StackPanel>
    <Label>Test</Label>
    <Label Content="{Binding Name}"></Label>
</StackPanel>
Run Code Online (Sandbox Code Playgroud)

https://github.com/rohits79/PrismAutoWire/tree/master/Prism%20App/MainModule

请忽略https://github.com/rohits79/PrismAutoWire/blob/master/Prism%20App/Prism%20App/Bootstrapper.cs#L34中的硬编码路径

c# wpf prism

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

模式匹配期望非空列表的圆括号而不是方括号

在Haskell中,为什么模式匹配期望列表具有圆括号,但是当它不为空时不支持方括号?当它尝试使用空列表[](方括号)进行模式匹配时,为什么它不遵循相同的约定.不应该专门为元组保留圆形括号吗?

例如 - 下面不起作用

third :: Integral a => [a] -> a
third xs = case xs of 
                      [] -> 0
                      [_:_:x:_] -> x
                      otherwise -> 0
Run Code Online (Sandbox Code Playgroud)

但这很有效

third :: Integral a => [a] -> a
third xs = case xs of 
                      [] -> 0
                      (_:_:x:_) -> x
                      otherwise -> 0
Run Code Online (Sandbox Code Playgroud)

haskell

1
推荐指数
2
解决办法
156
查看次数

除非与点运算符一起使用,否则函数组合不起作用

为什么第一种情况可行而不是第二种情况?我相信 .运算符链接函数,因为f返回布尔值我可以"不"它,但为什么它在第二种情况下不起作用?

*Main> let filterNot f xs = filter (not . f) xs
*Main> let filterNot f xs = filter (not (f)) xs
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
1
解决办法
121
查看次数

计算阵列的长度而不会炸毁堆栈

如何在不炸毁堆栈的情况下计算阵列的长度?我的两次尝试对我来说都不好看

let rec slowComputeLength xs = match xs with
                               | x::xss -> 1 + slowComputeLength xss
                               | _ -> 0

let computeLength xs = List.fold (fun acc _ -> acc + 1) 0 xs
Run Code Online (Sandbox Code Playgroud)

我可以想到在模式匹配的第一个版本中传递累加器,但这会使API变得丑陋

let rec slowComputeLength xs acc = match xs with
                                   | x::xss -> slowComputeLength xss acc+1
                                   | _ -> 0
Run Code Online (Sandbox Code Playgroud)

List.fold是正确的方式还是创建类似下面的东西,我相信它也会打到堆栈?

(1 + (1 + (1 + (...))))?
Run Code Online (Sandbox Code Playgroud)

PS - 我这样做是为了练习,理想情况下我们应该使用Array.Length.

f#

0
推荐指数
1
解决办法
110
查看次数

protobuf-net port到.net core 2.0

我需要.net core 2.0上的谷歌协议缓冲区.我知道.net core 2.0上没有正式的google proto缓冲区实现,但是protobuf-net可以移植到.net core 2.0吗?

我尝试自己移植它,我看到该库使用的AppDomain.CurrentDomain.DefineDynamicAssembly尚未移植到.net核心.

另外.net WEBAPIController如何使用google协议缓冲区?

.net c# protobuf-net .net-core

-4
推荐指数
1
解决办法
3128
查看次数

标签 统计

haskell ×4

c# ×3

.net ×2

rust ×2

.net-core ×1

f# ×1

fold ×1

list-comprehension ×1

primes ×1

prism ×1

protobuf-net ×1

recursion ×1

sieve ×1

windbg ×1

wpf ×1