小编Man*_*idt的帖子

Rust书上市10-16:期望类型`T`找到类型`&T`

当我尝试实现以下修改时,我陷入了清单10-16:

如果我们改变返回类型&T而不是T更改函数体以返回引用,我们就不需要 Clone或者Copy特征边界,我们也不会进行任何堆分配.尝试自己实施这些替代解决方案!

我的代码是

use std::cmp::PartialOrd;

fn largest<T: PartialOrd>(list: &[T]) -> &T {
    let mut largest: &T = &list[0];

    for &item in list.iter() {
        if item > largest {
            largest = &item;
        }
    }

    largest
}

fn main() {
    let number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char …
Run Code Online (Sandbox Code Playgroud)

rust

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

使用数值类型类的变量赋值

我正在尝试编写一个处理Fibonacci序列的泛型迭代器:

def FibIter[T](fst:T , snd:T)(implicit num:Numeric[T]) = new Iterator[T] {
  var fn1 = fst
  var fn2 = snd
  def hasNext = true
  def next() = {
    val ret = fn1
    fn1 = fn2
    fn2 = num.plus(ret,fn2)
    ret
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器抱怨前两个变量赋值:

结构细化中的参数类型可能不是指在该细化之外定义的抽象类型

有谁知道如何解决这个问题?非常感谢你!

scala

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

接口中的所有/大多数方法都应该返回Option吗?

是否一个好的做法是制作所有可能存在未来实现的接口(特征)方法,其中无效参数返回一个选项?

让我举个例子.如果我要实现具有特征的概率分布的库

trait Similarity {
   def getDensity(): Double
}
Run Code Online (Sandbox Code Playgroud)

由于大多数分布未在整个真实空间中定义,因此总是存在一些非法参数,例如高斯分布的非正方差.如果我理解正确的话,我应该回归Option[Double]而不是Double投掷IllegalArgumentException.

我认为大多数功能/计算都是如此.在这种情况下,什么是"最佳做法"?我担心这会让图书馆过于笨拙.

谢谢

functional-programming scala

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

如何安装 vscode 的扩展?

这是一个初学者的问题。所以有一个包vscode-with-extensions。该说:

与编辑器一起安装的一组 vscode 扩展。下面是一个例子:

vscode-with-extensions.override {
  # When the extension is already available in the default extensions set.
  vscodeExtensions = with vscode-extensions; [
    bbenoist.Nix
  ]
  # Concise version from the vscode market place when not available in the default set.
  ++ vscode-utils.extensionsFromVscodeMarketplace [
    {
      name = "code-runner";
      publisher = "formulahendry";
      version = "0.6.33";
      sha256 = "166ia73vrcl5c9hm4q1a73qdn56m0jc7flfsk5p5q41na9f10lb0";
    }
  ];
}
Run Code Online (Sandbox Code Playgroud)

凡在configuration.nix我必须把这个表情?我已经有了

  environment.systemPackages = with pkgs; [
     wget 
     vim 
     vscode-with-extensions
  ];
Run Code Online (Sandbox Code Playgroud)

其中。

nixos nixpkgs

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

类型安全的Builder:如何设置编译器错误消息

我在类型安全构建器模式中使用幻像类型,以确保只调用一次方法,如下面的代码示例所示

  sealed trait TBoolean
  sealed trait TTrue extends TBoolean
  sealed trait TFalse extends TBoolean

  class Builder[MethodCalled <: TBoolean] private() {

    def foo()(implicit ev: MethodCalled =:= TFalse): Builder[TTrue] = {
      new Builder[TTrue]
    }
  }

  object Builder {
    def apply() = new Builder[TFalse]()
  }
Run Code Online (Sandbox Code Playgroud)

Builder().foo().foo()不能按要求工作,但是我想将错误消息设置为用户可读的内容.目前消息是

这一行有多个标记 - 方法foo没有足够的参数:(隐式ev:=:= [W.TTrue,W.TFalse])W.Builder [W.TTrue].未指定的值参数ev. - 无法证明W.TTrue =:= W.TFalse. - 无法证明W.TTrue =:= W.TFalse.

scala

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

为什么在 Java 8 中有像 DoubleFunction 这样的原始函数

我刚刚看了新的Java 8函数包,想知道为什么会有这样的接口

  • DoubleFunction
  • IntFunction
  • LongFunction
  • ...

这也不会延长Function。这是否意味着我将无法通过 a需要a 的Function<T,Int>地方IntFunction<T>,反之亦然?这同样适用于*Block*Supplier*UnaryOperator

我可以看到在null返回原语时不必检查的优点,但缺点列表似乎要长得多

java functional-programming

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

将矩阵的每一行乘以随机数的最佳方法

我想将矩阵的每一行乘以一个随机数,例如

Y = R*X
Run Code Online (Sandbox Code Playgroud)

对角矩阵R大小的TxN含有条目从rand()与基体X尺寸的NxM非常大的 TN.目前我使用

r = rand(T)
Y = scale(r, X)
Run Code Online (Sandbox Code Playgroud)

但我想知道这是做得更快还是更好.例如,我认为没有必要创建向量r,但我不知道如何y[i] = rand()*X[i,:]有效/并行调用.

parallel-processing julia

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

为什么对可迭代对象进行映射会返回一次性可迭代对象?

为什么map使用可多次迭代的对象调用时不返回也可多次迭代的对象?我认为后者更为合理。

我的用例是我有很多data,因此只能对其进行迭代。map(理论上)非常适合 上的操作data,因为它是惰性的。然而,在下面的示例中,我希望两次长度相同。

iterable = [1,2,3,4]  # this can be iterated repeatedly
m = map(lambda x:x**2, iterable) # this again should be iterable repeatedly
print(len(list(m))) # 4
print(len(list(m))) # 0
Run Code Online (Sandbox Code Playgroud)

如何映射可迭代结构并获取可迭代结构?

编辑: 这是一个恕我直言应该如何工作的示例,演示了惰性评估:

def g(): 
    print('g() called')

data = [g, g]

# map is lazy, so nothing is called
m = map(lambda g: g(), data)
print('m: %s' % len(list(m))) # g() is called here
print('m: %s' % len(list(m))) # this should work, …
Run Code Online (Sandbox Code Playgroud)

python iteration iterator python-3.x

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

类型安全的构建器:如何组合幻像类型

我在类型安全构建器模式中使用幻像类型,以确保只调用一次方法,如下面的代码示例所示

  sealed trait TBoolean
  sealed trait TTrue extends TBoolean
  sealed trait TFalse extends TBoolean

  class Builder[MethodCalled <: TBoolean] private() {

    def foo()(implicit ev: MethodCalled =:= TFalse): Builder[TTrue] = {
      new Builder[TTrue]
    }
  }

  object Builder {
    def apply() = new Builder[TFalse]()
  }
Run Code Online (Sandbox Code Playgroud)

我非常欣赏这种方法,因为可以使用.-operator来链接方法调用(与其他方法不同)但是,如果有很多方法可以防止以类似的方式结束,这就变得不方便

  class Builder[MethodCalled1 <: TBoolean, MethodCalled2 <: TBoolean, ... ,MethodCalledN <: TBoolean]
Run Code Online (Sandbox Code Playgroud)

有没有办法创建"类型结构"?像下面的伪代码:

  type S {
      type MethodCalled1 <: TBoolean
      type MethodCalled2 <: TBoolean
      ...
      type MethodCalledN <: TBoolean
  }

  class Builder[S] private() {

    def foo()(implicit …
Run Code Online (Sandbox Code Playgroud)

scala

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

Evaluate all pairs of matrices

I have a function f which takes 2 matrices with the same number of rows and procudes a scalar value. A am now looking for a possibility to create a new function which takes two lists of matrices and calls f for all pairs.

I need a moore efficient implementation of this loop:

% X = cell of matrices
% Y = cell of matrices
for k=1:length(X)
    for l=1:length(Y)
        M(k,l) = f(X{k},Y{l});
    end
end
Run Code Online (Sandbox Code Playgroud)

(It is not a requirement that …

matlab matrix

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