我正在使用版本4的Ocaml.当我以交互方式定义某种类型时,解释器会在此之后立即打印出该类型的字符串表示:
# type foo = Yes | No;; <-- This is what I entered
type foo = Yes | No <-- This is what interpreter bounced
Run Code Online (Sandbox Code Playgroud)
但是在我输入更多定义之后,有时我想再次看到该类型的文本表示.
在Haskell中,我可以输入":t foo".
我怎么能在Ocaml中这样做?
我想知道在Scala案例类中使用泛型是否可以节省一些样板代码.
让我们保存我有以下类hieararchy来模拟一个"变体"类型,它包含一组类型并允许使用模式匹配拆箱:
sealed abstract class Box;
case class DoubleBox(v: Double) extends Box;
case class StringBox(v: String) extends Box;
case class BooleanBox(v: Boolean) extends Box;
def typeName(b: Box) = b match {
case DoubleBox(v) => "Double"
case StringBox(v) => "String"
case BooleanBox(v) => "Boolean"
case _ => "Unknown"
}
Run Code Online (Sandbox Code Playgroud)
代码中可能存在一些地方,如果它们是泛型,那么处理叶子类更方便.就像是:
sealed abstract class Box;
case class TypedBox[T](v: T) extends Box;
def typeName2(b: Box) = b match {
case TypedBox[Double](v) => "Double"
case TypedBox[String](v) => "String"
case TypedBox[Boolean](v) => "Boolean"
case _ …Run Code Online (Sandbox Code Playgroud) 我有一个在 Google Compute Engine 上运行的虚拟机实例 (Debian wheezy)。创建实例时,目录root中默认有 3 个用户(除了 )/home。例如,如果我的电子邮件 ID(用于登录 Google 云平台)是,ab@xyz.co则目录中的 3 个用户/home是ab、abxyz和ab_xyz_co。我不明白创建 3 个不同的用户有什么意义。
当我登录时,默认情况下我以用户身份登录到机器abxyz。我也不能假设其他两个用户(ab和ab_xyz_co)只是存在并且从未使用过,因为我可以在其他 2 个用户的主目录中看到一些文件夹,其大小随时间而变化。此外,这些文件夹的大小不同,即相同的内容不会添加到所有帐户中。
这是怎么回事?有任何想法吗?
cloud virtual-machine google-compute-engine google-cloud-platform
我们的大部分工作都使用 Docker 容器,包括在我们自己的机器上进行开发。这些是短暂的(例如,每次我们运行测试时都开始)。
对于 AWS,身份验证很容易——我们在我们的环境中有我们的密钥,这些密钥被传递到容器。
我们开始使用 Google Cloud 服务,认证路径似乎比 AWS 更难。在进行本地开发时,gcloud auth login效果很好。但是在临时容器中工作时,每次都需要登录过程,而且我还没有找到一种使用 a) 环境变量或 b) 映射卷来持久化用户凭据的方法——这是将数据传递给的两种方式容器。
据我所知,唯一的途径是使用服务帐户。但我认为每个人都需要自己的服务帐户,并且需要不断更新该帐户的权限以使其与自己的保持一致。
有没有更好的办法?
关于Iterator [T]的Scala文档在此处表示以下内容:
特别重要的是要注意,除非另有说明,否则永远不要在调用迭代器后使用迭代器。两个最重要的例外也是唯一的抽象方法:
next和hasNext。
它们还给出了安全和不安全使用的特定示例:
def f[A](it: Iterator[A]) = {
if (it.hasNext) { // Safe to reuse "it" after "hasNext"
it.next // Safe to reuse "it" after "next"
val remainder = it.drop(2) // it is *not* safe to use "it" again after this line!
remainder.take(2) // it is *not* safe to use "remainder" after this line!
} else it
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在这里没有遵循不安全的想法。有人可以在这里给我一些启发吗?
在我的C/C++程序中,我想检查用户指定的数据目录是否驻留在NFS文件系统上.需要进行检查,因为远程NFS目录的数据处理延迟/带宽更差.如果数据目录是NFS,我想向用户发出警告.
我怎样才能做到这一点?我认为有stat()调用应该可以帮助我,但细节不明确.
我在Linux上.
我正在将一个小型库的使用添加到一个现有的大型软件中,并希望分析(在查找器详细信息中,而不仅仅是在输入和输出rdtsc()或gettimeofday调用中)开销和它是小型库的归属.使用像rdtsc()之类的东西我可以了解调用我的库函数所具有的延迟,但我不能做延迟归因,除非我还能看到分支是否被预测得不好,缓存是否正常工作等等.我查看了PAPI,因为我想到在更大的二进制文件的上下文中查看进出模块中的例程的某些硬件事件,但似乎我需要一个特定的内核模块供PAPI为我工作(Linux 2.6. 18 && Intel Xeon 5570)...有专门针对英特尔处理器的Vtune,但看起来它可以分析整个二进制文件的性能而不是特定的代码片段(3-4次调用到我的库中).
有没有办法让我使用Vtune作为我的目标,或者可能让我可以访问这些计数器而无需修补我的内核?
我正在尝试分析Google CLoud Stackdriver's Profiling,现在任何人都可以请告诉我如何使用此优化我的代码.
另外,我看不到任何我的函数名称和所有,我不知道这是什么_tickCallback以及它执行的代码的哪一部分?
任何人都请帮助我.
google-app-engine node.js google-cloud-platform stackdriver google-cloud-profiler
linux ×2
scala ×2
c ×1
case-class ×1
cloud ×1
generics ×1
intel-vtune ×1
iterator ×1
nfs ×1
node.js ×1
ocaml ×1
performance ×1
profiling ×1
stackdriver ×1
stat ×1