小编bba*_*ker的帖子

优化案例类用作符号

我正在使用将标识符作为字符串传递的Java API。对我来说,使用键入符号似乎更好一些,所以我写了这样的代码:

  object Helpers {
    implicit def actionToString(action: Action): String =
      action.getClass.getName.stripSuffix("$").replaceAll(".*\\$", "")

    object Action{
      def apply(name: String): Action = {
        Class.forName("tutorial.HelloInput$Helpers$" + name).newInstance()
          .asInstanceOf[Action]
      }
    }
    sealed abstract class Action {
      override def toString: String = actionToString(this)
    }
    final case class Rotate() extends Action
    final case class Right() extends Action
    final case class Left() extends Action
    final case class Pause() extends Action
  }
Run Code Online (Sandbox Code Playgroud)

这允许以自然的方式对字符串和操作进行“序列化”和“反序列化”,例如,我可以在模式上进行匹配Action(Pause),但Pause()由于隐式转换,我也可以传递给期望字符串的Java库。

有没有更好的方法可以做到这一点,特别是在性能方面?这种方法有什么问题,以后可能会再次咬我吗?

我在阅读有关Dotty中Phantom类型的内容,并想知道它们是否可用于提高处理符号的性能(或者新的Enums将是更好的选择)。

scala dotty

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

一次性价值 - Scala 中的最佳实践是什么?

WartRemover NonUnitStatements要求不返回单元的语句必须具有赋值。好的,但有时我们不得不使用烦人的 Java API,它们会发生变化并返回一个值,而实际上我们几乎从不关心返回值。

所以我最终尝试了这个:

val _ = mutateSomething(foo)
Run Code Online (Sandbox Code Playgroud)

但是,如果我有多个这些,_实际上是已分配给的合法 val,因此我无法重新分配。Wartremover 也会正确地警告无缘无故的 var-usage,所以我不能只是这样做var _ =

我可以执行以下操作(需要;避免 Scala 认为它是一个继续定义,除非我每次都添加一个完整的换行符)。

;{val _ = mutateSomething(foo)}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

scala scala-wartremover

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

如何在nix中记录可重现的配置文件(尤其是来自nix-env)?

所以,最终开始获得一个稳定的nix环境,我基本上可以完成我的所有开发.Hooray!

现在我想让它具有可重现性,如在yarn.lock中(对于那些熟悉javascript版本中的npm/yarn)或Pipfile.lock(非常类似于Python).

基本上我的想法是,无论何时运行nix-env -if my-env.nix,或者在运行此命令之后,我都有办法生成类似的锁文件,如果它是如何工作的.从这个锁定文件,我可以完全恢复我的nix配置文件,直到确定的安装配置文件的依赖项和子依赖项的版本.在测试出新的改进之后,可以将其检入git或其他任何内容,因此将保持环境记录.

在我看来,这将是Nix最明显的使用案例之一,而且仅仅使用Docker的主要优势之一(尽管两者并不相互排斥),所以如果我错过了一些相关的文档,我会道歉.

nix

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

如何使用 nix-build -E 构建具有覆盖的包

特别是,我想用doCheck=true.

作为起点,当我用我感兴趣的包尝试这个时(singularity):

nix-build '<nixpkgs>' -E '(import <nixpkgs>{}).singularity'
Run Code Online (Sandbox Code Playgroud)

最终目标是这样的:

nix-build -E '(import <nixpkgs>{}).singularity.override { doCheck=true; }' --pure 
Run Code Online (Sandbox Code Playgroud)

这两种情况都会导致错误消息:

error: expression does not evaluate to a derivation (or a set or list of those)
Run Code Online (Sandbox Code Playgroud)

当然,也许还有一种更简单的方法来启用checkPhase,在这种情况下,我想这个问题可能有两个答案。

nix

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

如何解决父pom依赖问题:无法读取工件描述符;找不到文物?

我最近向Maven Central发布了三个工件:https : //search.maven.org/search? q = ced2ar3- rdb

这三个是同一项目的一部分,并且同时发布。

我现在正在尝试使用ced2ar-rdb和ced2ar-rdb-tests作为依赖项来构建新项目,但没有在我的代码中引用父pom文件的位置(ced2ar3-rdb-parent;我实际上不想使用它,并且认为我不需要它)。但是,当我尝试构建使用ced2ar-rdb作为依赖项的项目时,出现以下错误:

[ERROR] Failed to execute goal on project ced2ar3-services-core: Could not resolve dependencies for project edu.cornell.
ncrn.ced2ar:ced2ar3-services-core:jar:0.0.0: Failed to collect dependencies at edu.cornell.ncrn.ced2ar:ced2ar3-rdb:jar:0
.0.1: Failed to read artifact descriptor for edu.cornell.ncrn.ced2ar:ced2ar3-rdb:jar:0.0.1: Could not find artifact edu.
cornell.ncrn.ced2ar:ced2ar3-rdb-parent:pom:${ced2ar.version} in central (https://repo.maven.apache.org/maven2) -> [Help   
Run Code Online (Sandbox Code Playgroud)

该问题是否与我<version>${ced2ar.version}</version>在父pom中拥有的事实有关,即使它在文件的更下方已经${ced2ar.version}正确定义<properties>了吗?

maven parent-pom

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

为什么在where子句中定义时,以下函数不在范围内?

import               Data.Char (chr, ord)

num2Str :: Int -> String
num2Str n | n < 26 = [num2Chr n]
num2Str n          = num2Chr n : num2Str (n - 26)
  where {
    num2Chr :: Int -> Char;
    num2Chr n = chr(97 + n `mod` 26)
  }
Run Code Online (Sandbox Code Playgroud)

这导致错误

    * Variable not in scope: num2Chr :: Int -> Char
    * Perhaps you meant `num2Str' (line 132)
    |
132 | num2Str n | n < 26 = [num2Chr n]
    |                       ^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我尝试了一些替代布局,但似乎都没有.

次要更新

代码中存在一些与问题无关的逻辑错误; 这是一个更正版本: …

haskell

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

在 Haskell 中使用 Dynamic/fromDynamic 时是否可以恢复约束?

我正在设计一个需要跟踪不同类型表格的系统。拥有一个权威的表列表会非常方便*,并且拥有此列表的最佳方式 - 我认为 - 作为代理列表,因为有时我确实需要该类型。我认为 HLists 是一种选择,但即使在大量使用 Haskell 2 年后,它们看起来也很笨拙,所以我一直在寻找Dynamic.

  • 实际上,最好有 0 个列表,并且只有一种方法可以在运行时查询特定类型类的所有可用实例,但我不确定有没有办法做到这一点(最后我检查过)。

我的代码目前看起来像这样:

allCowProxies :: [Dynamic]
allCowProxies = [
    toDyn $ Proxy @HoboRecord
  , toDyn $ Proxy @AF.AfiFarmRecord
  , toDyn $ Proxy @DCP.DcPrediction
  , toDyn $ Proxy @DCF.DcFreshFeatures
  , toDyn $ Proxy @DCH.DcHistorical
  , toDyn $ Proxy @SA.ShActivity
  , toDyn $ Proxy @SRE.ShRumAndEating
  , toDyn $ Proxy @SX.SxRecord
  ]

allCowRecs :: [TypeRep]
allCowRecs = catMaybes $ toTypeRep <$> allCowProxies
  where
    toTypeRep d = case fromDynamic d of …
Run Code Online (Sandbox Code Playgroud)

haskell

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

当lambda是函数参数时,如何使多行lambda工作?

我有一些代码如下,当所有在一行上,编译和功能正确:

let xsMat = makeArrayR U Seq(mapSize :. mapSize) (\(x :. y) 
  -> noiseValue perlinNoise(fromIntegral x, fromIntegral y, 0 ) )
Run Code Online (Sandbox Code Playgroud)

但我目前得到的错误是:

Main.hs:31:7: error:
    parse error (possibly incorrect indentation or mismatched brackets)
   |
31 |       -> noiseValue perlinNoise(fromIntegral x, fromIntegral y, 0 ) )
   |       ^
Run Code Online (Sandbox Code Playgroud)

我看到了Haskell Multi-line Lambdas,但也许我还缺少一些东西,或者这可能只是一个不同的问题.

我们也欢迎超出所需要的文体建议.

更新: @melpomene和Chris Smith的答案都解决了这个问题,值得一读(对于其他人来说)!对于风格改进,有人还建议使用$我欣赏的,但他们的答案被删除(我认为因为核心问题没有得到解决 - 但也谢谢你):

let xsMat = makeArrayR U Seq(mapSize :. mapSize) $ \(x :. y)
      -> noiseValue perlinNoise (fromIntegral x, fromIntegral y, 0 ) 
Run Code Online (Sandbox Code Playgroud)

haskell

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

如何修复 Cabal 中的“找不到模块”错误,当它似乎正确指定时?

我目前在这个项目中根本没有使用堆栈(只是 Cabal),当一切都在 Main.hs 中时,一切都很顺利。我决定拆分代码,将我的 dhall dep 和相关代码从我的可执行 deps 移动到我的库 deps,现在运行时似乎有这个奇怪的错误cabal new-build

Building executable 'FarmDataServer.exe' for FarmDataServer-0.1.0.0..                                                                                                                                      
<no location info>: warning: [-Wmissing-home-modules]                                                                                 
    These modules are needed for compilation but not listed in your .cabal file's other-modules: FDS                                  
                                                                                                 FDS.Config.Core                      
                                                                                                 FDS.Config.DhallConf                 
[2 of 4] Compiling FDS.Config.DhallConf ( src/FDS/Config/DhallConf.hs, /home/brandon/workspace/CIDA/FarmDataServer/dist-newstyle/buil
d/x86_64-linux/ghc-8.4.4/FarmDataServer-0.1.0.0/x/FarmDataServer.exe/build/FarmDataServer.exe/FarmDataServer.exe-tmp/FDS/Config/Dhall
Conf.o )                                                                                                                              

src/FDS/Config/DhallConf.hs:7:1: error:                                                                                               
    Could not find module `Dhall'                                                                                                     
    Use -v to see a list of the files searched for.                                                                                   
  |                                                                                                                                   
7 | import           Dhall                                                                                                            
  | ^^^^^^^^^^^^^^^^^^^^^^     
Run Code Online (Sandbox Code Playgroud)

当然,我也对这条Wmissing-home-modules消息有点困惑,因为我似乎已经在我的阴谋集团文件中添加了这些。

我的 …

haskell cabal

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

如何创建一个可以采用元组而不仅仅是单个函数的fmap?

这可能是一种构建方式

是否有(理想的标准)完成方式

 f :: Int -> Int
 f x = 2*x
 g :: Int -> String
 g x = show x
 h = (f, g)
 fmap h 5 -- results in: (10, "5")
Run Code Online (Sandbox Code Playgroud)

一般来说,对于从A-> T_i到某些变量类型T_i和固定类型A的函数,我认为这只是BiFunctor的简化,至少是2元组的1参数函数 - 它将是很高兴看到超越2元组的概括.

haskell category-theory

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