小编chr*_*ris的帖子

Scala类参数化中附加冒号的含义

[A : Manifest : WireFormat]以下代码的含义是什么?它来自com.nicta.scoobi.TextInput(可在github上获得).它似乎不是任何通常的类型边界.

  def fromDelimitedTextFile[A : Manifest : WireFormat]
      (path: String, sep: String = "\t")
      (extractFn: PartialFunction[List[String], A])
    : DList[A] = {

    val lines = fromTextFile(path)
    lines.flatMap { line =>
      val fields = line.split(sep).toList
      if (extractFn.isDefinedAt(fields)) List(extractFn(fields)) else Nil
    }
  }
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到有关此主题的更多信息?

generics types scala

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

在emacs中设置auto-mode-alist

我注意到当前的自动模式alist条目都以单引号结束,例如

 ("\\.java\\'" . java-mode)
Run Code Online (Sandbox Code Playgroud)

单引号的目的是什么?我本以期待看到

 ("\\.java$" . java-mode)
Run Code Online (Sandbox Code Playgroud)

我问的原因是我试图获取名称与regexp匹配的文件

^twiki\.corp.* 
Run Code Online (Sandbox Code Playgroud)

以组织模式打开.我试过以下没有成功:

(add-to-list 'auto-mode-alist '("^twiki\\.corp" . org-mode))
(add-to-list 'auto-mode-alist '("\\'twiki\\.corp" . org-mode))
Run Code Online (Sandbox Code Playgroud)

以下作品:

(add-to-list 'auto-mode-alist '("twiki\\.corp" . org-mode))
Run Code Online (Sandbox Code Playgroud)

但是不是我想要的,因为嵌入了twiki.corp的文件名将在org-mode中打开.

emacs elisp

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

是否在TensorFlow中实现了稀疏张量乘法?

稀疏张量与它们自身或密集张量的相乘似乎在TensorFlow中不起作用.以下示例

from __future__ import print_function
import tensorflow as tf

x = tf.constant([[1.0,2.0],
                 [3.0,4.0]])
y = tf.SparseTensor(indices=[[0,0],[1,1]], values=[1.0,1.0], shape=[2,2])
z = tf.matmul(x,y)

sess = tf.Session()
sess.run(tf.initialize_all_variables())
print(sess.run([x, y, z]))
Run Code Online (Sandbox Code Playgroud)

失败并显示错误消息

TypeError: Input 'b' of 'MatMul' Op has type string that does not match type 
float32 of argument 'a'
Run Code Online (Sandbox Code Playgroud)

两个张量都具有float32类型的值,通过在没有乘法运算的情况下对它们进行求值来看.y与其自身的乘法返回类似的错误消息.x与其自身的乘法运行良好.

sparse-matrix tensorflow

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

Clojure:从String类名创建新实例

在Clojure中,给定一个类名作为字符串,我需要创建一个新的类实例.换句话说,我如何在中实现new-instance-from-class-name

(def my-class-name "org.myorg.pkg.Foo")
; calls constructor of org.myorg.pkg.Foo with arguments 1, 2 and 3
(new-instance-from-class-name  my-class-name 1 2 3) 
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个更优雅的解决方案

  • 从类中构造函数调用Java newInstance方法
  • 使用eval,load-string,...

在实践中,我将在使用defrecord创建的类上使用它.因此,如果该场景有任何特殊语法,我会非常感兴趣.

constructor clojure

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

Clojure:引用命名空间的名称

在Clojure中,如何获取命名变量和函数的命名空间的名称?例如,改进以下内容:

(ns my-ns)

(def namespace-name "my-ns")
Run Code Online (Sandbox Code Playgroud)

上面的问题是,如果我想更改my-ns的名称,我还必须更改namespace-name的定义

namespaces clojure

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

clojure解析函数来自字符串名称

在clojure 1.2RC1中,我希望获得一个基于其名称为字符串的函数并对其进行评估.

功能定义

(ns my-ns)

(defn mycar [x] (first x))
Run Code Online (Sandbox Code Playgroud)

以下工作:

((ns-resolve *ns* (symbol "mycar")) '(3 4))
((intern *ns* (symbol "mycar")) '(3 4))
((eval (symbol "mycar")) '(3  4))
Run Code Online (Sandbox Code Playgroud)

但他们看起来很难看.有没有更好的办法?如果没有,上面哪个是最惯用的?

eval clojure

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

因子Clojure代码在Java对象中设置许多不同的字段

如何在Java对象中设置许多不同字段的代码?我想要因素

(set! (. employee name) "Chris")
(set! (. employee age) 100)
(set! (. employee salary) 5000)
Run Code Online (Sandbox Code Playgroud)

(doseq [field '((name "Chris") (age 100) (salary 5000))]
  (set! (. employee (first field)) (second field)))
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,因为句点是一个宏,并试图从字面上评估(第一个字段).顺便说一句,我明白设置字段不是好习惯.我需要与遗留代码互操作.

field clojure

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

所有一阶和二阶预测因子的公式,包括R中的相互作用

在统计编程语言R中,使用以下公式(在lm()或glm()中使用)

z ~ (x+y)^2  
Run Code Online (Sandbox Code Playgroud)

相当于

z ~ x + y + x:y
Run Code Online (Sandbox Code Playgroud)

假设,我只有连续的预测因子,有一种简明的方法可以获得

z ~ I(x^2) + I(y^2) + I(x) + I(y) + I(x*y)
Run Code Online (Sandbox Code Playgroud)

为因子预测器做正确事情的公式是一个优点.

一种可能的解决方案是

z ~ (poly(x,2) + poly(y,2))^2
Run Code Online (Sandbox Code Playgroud)

我正在寻找更优雅的东西.

r formula

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

Clojure:函数的完全限定名称

在Clojure中,是否有更优雅的方法来查找函数的完全限定名称(已知具有元信息)

(defn fully-qualified-name [fn]
  (let [fn-meta (meta fn )
        fn-ns (ns-name (:ns fn-meta))
        ]
    (str fn-ns "/" (:name fn-meta))))
Run Code Online (Sandbox Code Playgroud)

需要运行时解决方案.欢迎阅读时和编译时解决方案.

namespaces clojure

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

在 Haskell 中创建可变的 Data.Vector

我希望使用 Data.Vector.Generic.Mutable.new 创建一个可变向量。我找到了通过解冻纯向量来创建可变向量的示例,但这不是我想要做的。

这是许多失败的尝试之一:

import Control.Monad.Primitive
import qualified Data.Vector.Generic.Mutable as GM

main = do
  v <- (GM.new 10) :: (GM.MVector v a) => IO (v RealWorld a)
  GM.write v 0 (3::Int)
  x <- GM.read v 0
  putStrLn $ show x
Run Code Online (Sandbox Code Playgroud)

给我错误

No instance for (GM.MVector v0 Int)
  arising from an expression type signature
Possible fix: add an instance declaration for (GM.MVector v0 Int)
Run Code Online (Sandbox Code Playgroud)

我尝试了基于 Haskell Vector 教程的变体,但没有成功。

我也欢迎关于构建向量的更清洁方法的建议。对现实世界的提及对我来说似乎很难看。

haskell vector mutable

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

尽管对Clojure中的Java构造函数有类型提示,但仍存在反射警告

尽管有提示类型,以下代码也给了我一个反射警告。

(set! *warn-on-reflection* true)

(IllegalArgumentException.
  ^String (with-out-str (print "hi")))
Run Code Online (Sandbox Code Playgroud)

警告:

Reflection warning ... 
call to java.lang.IllegalArgumentException ctor 
can't be resolved.
Run Code Online (Sandbox Code Playgroud)

该代码是从一个更复杂的例子中提取并简化的,该例子中漂亮的打印了一个任意对象with-out-str。我正在使用Clojure 1.10.0。

clojure type-hinting

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

将列表和元素合并为向量的优雅方式

有没有更简洁和/或优雅的方式来表达 let.js 中的最后一行?

(let [a ... ; int
      b ... ; int
      xs ... ; list
      y ... ; int
      z ... ; int
      ]
  (into [a b] cat [xs [y z]]))
Run Code Online (Sandbox Code Playgroud)

结果应该是一个向量。上面的表达式对于它完成的简单任务来说看起来相当复杂。在 Python 中,这将 [a, b] + xs + [y,z]更好地捕获两个附加操作的相似性。可以捕获这种相似性的更长的变体是

(into [] cat [[a b] xs [y z]])
Run Code Online (Sandbox Code Playgroud)

我使用的尝试concat似乎很冗长,但也许更具可读性?

(vec (concat [a b] xs [y z]))
Run Code Online (Sandbox Code Playgroud)

clojure

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

scalapb 和自定义源生成器冲突

我希望向 sbt 添加一个自定义源生成器,并将它与 Scala 协议缓冲区生成器 scalapb 一起使用。每个都是独立工作的。但是,当两者结合时,项目在清理后第一次无法编译。如果我再次运行编译,它会成功。

name := "Foo root project"

scalaVersion in ThisBuild:= "2.12.1"

sourceGenerators in Compile += Def.task {
  val file = (sourceManaged in Compile).value / "demo" / "Test.scala"
  IO.write(file, """object Test extends App { println("Hi") }""")
  Seq(file)
}.taskValue

PB.targets in Compile := Seq(
  scalapb.gen() -> (sourceManaged in Compile).value
)
Run Code Online (Sandbox Code Playgroud)

错误信息:

[error] source file '/ ... /target/scala-2.12/src_managed/main/demo/Test.scala' could not be found
[error] one error found
[error] (compile:compileIncremental) Compilation failed
Run Code Online (Sandbox Code Playgroud)

要重现此错误,您至少需要在 src/main/protobuf 中有一个 proto 文件。

让我感到困惑的是两个源生成器,我的自定义任务和 scalapb 会发生冲突。他们不应该都写入 …

scala sbt scalapb

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