小编Luc*_*ier的帖子

'Classname <T>,T:Classname <T>'的作用是什么?

我正在阅读关于原型模式的德国维基百科文章.示例部分包含使用以下内容的通用C#实现:

abstract class Prototype<T> where T : Prototype<T> { ... }
...
class ConcretePrototype : Prototype<ConcretePrototype> { ... }
Run Code Online (Sandbox Code Playgroud)

这是如何运作的?如何将T限制为相同的泛型类?如何使用类从使用自身的泛型类型派生?

我不是在编程C#,但这个看起来很有趣.

来源:原型模式

c# generics

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

更改VSCode用户设置位置

我想将我的用户设置文件置于版本控制下,最好是一个单独的文件夹,但我找不到告诉VSCode我的设置文件所在位置的选项.

有没有办法更改Visual Studio代码查找settings.json文件的位置?

更新:

由于似乎没有一种简单的方法来更改用户设置文件的默认位置,除了在答案中传递命令行参数之外,我采用了不同的方法.

我创建了一个git存储库,其中包含我的所有dotfiles,设置文件等,并把我放在settings.json那里.此存储库克隆在我的硬盘驱动器的开发分区上的某处.然后,我使用该mklink.exe工具(我在Windows上)创建了一个符号链接到我的存储库中的默认用户设置目录(path-to-user/AppData/Roaming/Code/User/在Windows 上)中的设置文件.唯一的缺点是您无法移动存储库,也无法在不重新创建链接的情况下更改其布局.

博客文章中所述,不建议将符号链接更改为硬链接.此外,硬链接似乎弄乱了Windows上的时间戳,因此您不会settings.json在VSCode中看到任何更改.符号链接似乎正在工作.

visual-studio-code

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

使用F#中的类(可变性与不变性/成员与自由函数)

我目前正在做exercism.io F#track.对于每个不了解它的人来说,它正在解决TDD风格的小问题,以学习或改进编程语言.

最后两个任务是关于F#中类的使用(或者在F#中调用它们的类型).其中一个任务使用具有余额和状态(打开/关闭)的BankAccount,可以使用函数进行更改.用法是这样的(取自测试代码):

let test () =
    let account = mkBankAccount () |> openAccount
    Assert.That(getBalance account, Is.EqualTo(Some 0.0)
Run Code Online (Sandbox Code Playgroud)

我编写了代码,使用不可变的BankAccount类使测试通过,可以使用自由函数进行交互:

type AccountStatus = Open | Closed

type BankAccount (balance, status) =
    member acc.balance = balance
    member acc.status = status

let mkBankAccount () =
    BankAccount (0.0, Closed)

let getBalance (acc: BankAccount) =
    match acc.status with
    | Open -> Some(acc.balance)
    | Closed -> None

let updateBalance balance (acc: BankAccount) =
    match acc.status with
    | Open -> BankAccount (acc.balance + balance, Open)
    | …
Run Code Online (Sandbox Code Playgroud)

f#

13
推荐指数
3
解决办法
590
查看次数

在RxJava 2.x中发布具有背压的主题

我目前正在为我当前的项目选择RxJava 1.x或2.x.

我基本上需要PublishSubject一个背压策略onBackpressureLatest().

我想选择RxJava 2.x,但我不能完全理解如何将背压策略应用于a PublishSubject,因为它继承自Observable而不是继承Flowable.


你能告诉我如何在RxJava 2.x中创建一个PublishSubjectonBackpressureLatest()背压策略吗?

rx-java2

10
推荐指数
2
解决办法
4826
查看次数

Java中有很多例外的糟糕设计吗?

我目前正在用Java包装一个C库,使其更容易使用并在OO-Programming中工作.C库使用错误代码(int返回值)和Out-Parameter进行数据操作.我不一定是错误代码的粉丝,所以我想创建一些自定义的异常类,如果我的库检测到错误代码而不是"成功",我可以抛出这些类.

唯一的问题是每个方法可能引发的异常数量非常高(可以从每个C库函数返回一些错误代码,例如"Device_Not_Connected").自从我上次用Java编程以来已经有一段时间了,所以,我真的不知道Java中的Exceptions是什么情况.

  1. 抛出很多不同异常的方法是不是很糟糕?
  2. 我是否必须处理异常,或者有没有办法简单地忽略它?
  3. 如果我可以忽略一个异常,它是否会冒出调用树(例如在Python中)?
  4. 除了错误代码和无操作之外,Java中的异常还有其他替代方法吗?

java exception-handling exception

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

动态广播是通过继承层次结构糟糕的做法吗?

我有以下数据结构:

class Element {
  std::string getType();
  std::string getId();
  virtual std::vector<Element*> getChildren();
}

class A : public Element {
  void addA(const A *a);
  void addB(const B *b);
  void addC(const C *c);
  std::vector<Element*> getChildren();
}

class B : public Element {
  void addB(const B *b);
  void addC(const C *c);
  std::vector<Element*> getChildren();
}

class C : public Element {
  int someActualValue;
}

/* The classes also have some kind of container to store the pointers and
 * child elements. But let's keep the …
Run Code Online (Sandbox Code Playgroud)

c++ oop inheritance casting

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

了解F#文档功能签名

我目前正在使用免费的在线资源学习F#.由于我很好奇并试图在一些小练习中应用学到的东西,我发现自己经常查阅MSDN F#文档.

但文档似乎对我来说真的很神秘.把这个文档页面pown例如函数.用法很简单,但我不懂函数签名:

// Signature:
pown : ^T -> int -> ^T (requires ^T with static member One and ^T with static member op_Multiply and ^T with static member (/))
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下,以下是什么?

  1. T之前的^(Circumflex)是做什么的?
  2. "T"是什么意思?它是通用型吗?
  3. 双重做什么 - >做什么?
  4. 需求声明有什么作用?

我希望在一个答案中没有太多内容.

f#

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

强制让我们绑定到函数而不是值

我有这段代码应该生成随机名称:

let generateName =
    let rnd = System.Random()
    let c1 = rnd.Next(65, 90) |> System.Convert.ToChar |> string
    let c2 = rnd.Next(65, 90) |> System.Convert.ToChar |> string
    let n = rnd.Next(0, 999)  |> string
    c1 + c2 + n
Run Code Online (Sandbox Code Playgroud)

这会计算为一个字符串,这不是我想要的.添加unit-Parameter修复了问题,但现在我必须像C#函数一样调用我的函数:

let myFunc() =
    "Hello"

myFunc()
Run Code Online (Sandbox Code Playgroud)

这是我必须这样做,还是有更惯用的方式?

f#

5
推荐指数
3
解决办法
239
查看次数

在Elixir中生成无限序列

如何实现一个无限序列生成器,我可以使用Stream库函数进行操作?

我想用它来生成前n个素数.我有一个有效的递归方法,但我喜欢enumerables和管道好多了.

我在使用生成器的python中看到过这个:

def number_generator():
  n = 3
  while True:
    yield n
    n += 2
Run Code Online (Sandbox Code Playgroud)

是否有内置函数在Elixir中生成这样的序列,或者是一个简单的DIY替代品?这种模式在Elixir中有名字吗?

elixir

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

Elixir heredocs 关闭三重引号 (""") 行为

我注意到以下两个调用产生了不同的结果字符串:

# Closing quotes not indented
"""
 a
"""

# Closing quotes indented
"""
 a
 """
Run Code Online (Sandbox Code Playgroud)

第一个调用将返回" a\n",而第二个调用将返回a\n

似乎结束引号的缩进级别指示一个点,直到为heredoc中的每一行截断前导空格为止。如果您有 8 个前导空格和 4 的结束引号缩进,则结果字符串中将有 4 个前导空格。字符和第一个实际字符之后的所有内容都不会被截断。

我在 Elixir 文档中没有找到关于该行为的任何文档。这是一个错误吗?

elixir

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