小编Bri*_*Hsu的帖子

为什么Ruby中的'a = a``nil`?

我看了这个视频.为什么a = a评估nil是否a未定义?

a = a # => nil
b = c = q = c # => nil
Run Code Online (Sandbox Code Playgroud)

ruby local-variables variable-assignment

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

好的Haskell编码风格的if/else控制块?

我正在学习Haskell,希望它能帮助我更接近函数式编程.以前,我主要使用类似C语法的语言,如C,Java和D.

关于Wikibooks教程使用的if/ elsecontrol块的编码风格,我有一点疑问.代码如下所示:

doGuessing num = do
   putStrLn "Enter your guess:"
   guess <- getLine
   if (read guess) < num
     then do putStrLn "Too low!"
             doGuessing num
     else if (read guess) > num
            then do putStrLn "Too high!"
                    doGuessing num
            else do putStrLn "You Win!"
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为这种编码风格完全违背了类似C语言,我们应该缩进推荐款式if,else if以及else在同一列.

我知道它只是在Haskell中不起作用,因为如果我else在同一列缩进,那将是一个解析错误if.

但是以下风格怎么样?我认为它比上面的要清楚得多.但由于以上内容被Wikibooks和Yet Another Haskell Tutorial(在Haskell官方网站上标记为"最佳在线教程")使用,我不确定这种编码风格是否是Haskell程序中的约定.

doGuessing num = do
    putStrLn "Enter your guess:"
    guess <- getLine
    if (read guess) < …
Run Code Online (Sandbox Code Playgroud)

haskell coding-style

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

'this'引用是否存储在Java中的调用堆栈中?

我们已经知道,当我们在Java中调用方法时,参数和局部变量将存储在堆栈中.

例如,以下代码:

public class Test
{
    int x = 10;
    int y = 20;

    void test(int y)
    {
        int z = y;
        this.x = y; // How JVM knows where is our current object?
    }

    public static void main(String [] args)
    {
        Test obj = new Test();
        obj.test(3);
    }
} 
Run Code Online (Sandbox Code Playgroud)

当我们调用时,会产生如下所示的调用堆栈obj.test():

|             |
+-------------+
|     z       |
|     y       |  obj.test()
+-------------+
|    obj      |  main()
+-------------+
Run Code Online (Sandbox Code Playgroud)

但我想知道存储this在哪里引用method?它是否也存储在堆栈中,如下所示:

|             |
+-------------+
|   this      | …
Run Code Online (Sandbox Code Playgroud)

java callstack this calling-convention

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

我应该更喜欢Scala中的密封类或枚举吗?

我正在尝试为Scala 实现Plurk API,但我有一个设计选择.

例如,Plurk用户的性别属性可以是"男性","女性","其他"之一.

sealed trait Gender
object Male extends Gender
object Female extends Gender
object Others extends Gender
Run Code Online (Sandbox Code Playgroud)

问题是我应该像上面的代码示例那样更喜欢密封的类/对象,而不是Enumeration来表示枚举类型?

因为我发现当我使用其他Scala库时很少遇到Enumeration,并且很多Actor的教程使用密封的类/对象来表示Actor的消息.

那么这是否意味着在Scala中,密封类是比Enumeration更好/更传统的选择?

enums scala

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

什么是包装阻塞的最佳方法在Scala的Future [T]中尝试[T]?

这是问题,我有一个库有阻塞方法返回Try [T].但由于它是阻塞的,我想使用Future [T]使其无阻塞.在未来的块中,我还想计算一些依赖于原始阻塞方法的返回值的东西.

但是如果我使用下面的东西,那么我nonBlocking将返回Future [Try [T]],因为Future [T]已经代表Failure [U]已经不那么说服了,我宁愿把异常传播给Future [T]是自我.

def blockMethod(x: Int): Try[Int] = Try { 
  // Some long operation to get an Int from network or IO
  throw new Exception("Network Exception") }
}

def nonBlocking(x: Int): Future[Try[Int]] = future {
  blockMethod(x).map(_ * 2)
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的,我只是.getfuture {}块中使用方法,但我不确定这是否是最好的方法.

def blockMethod(x: Int): Try[Int] = Try { 
  // Some long operation to get an Int from network or IO
  throw new Exception("Network Exception") }
}

def nonBlocking(x: …
Run Code Online (Sandbox Code Playgroud)

scala

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

我怎么知道ScalaQuery中是否存在数据库表

我正在尝试ScalaQuery,这真的很棒.我可以使用Scala类定义数据库表,并轻松查询.

但是我想知道,在下面的代码中,我如何检查一个表是否存在,所以我不会两次调用'Table.ddl.create'并在我运行该程序两次时获得异常?

object Users extends Table[(Int, String, String)]("Users") {
    def id = column[Int]("id")
    def first = column[String]("first")
    def last = column[String]("last")
    def * = id ~ first ~ last
}

object Main
{
    val database = Database.forURL("jdbc:sqlite:sample.db", driver = "org.sqlite.JDBC")

    def main(args: Array[String]) {
        database withSession {
            // How could I know table Users is alrady in the DB?
            if ( ??? )  {
                Users.ddl.create
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

scala scalaquery

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

使用scala.util.Try进行for-understanding时的快速失败

我非常喜欢scala.util.TryScala 2.10,以及它如何与for-comprehension一起使用可以轻松处理可能出错的多个步骤.

例如,我们可以使用以下代码来确保我们只打印出这两个数字,当且仅当一切都在控制之下并且我们正确地得到了值.

def tryA: Try[Int] = {....}
def tryB: Try[Int] = {....}

for {
  a <- tryA
  b <- tryB
} { 
  println (s"We got:${a+b}")
}
Run Code Online (Sandbox Code Playgroud)

但我担心的一个问题是这个代码实际上忽略了任何异常,这意味着它看起来像下面的try-cactch块:

try {
  // .....
} catch {
  case _: Exception => // Swallow any exception
}
Run Code Online (Sandbox Code Playgroud)

据我所知,有一种说法认为这种代码是一种难闻的气味,因为没有人会注意到发生了异常.

我想要实现的是仍然使用for以确保println只有在一切正常的情况下执行,但如果在任何步骤中有任何异常,它将会爆炸并直接抛出异常.

目前这是我如何做到这一点,但它似乎不太优雅,因为它引入了一个新的Try[Unit]对象,所以我想知道如何使这个代码更好?

例如,是否可以摆脱result变量和result.get语句,但仍然会抛出异常?

def tryA: Try[Int] = {....}
def tryB: Try[Int] = {....}

val result = for {
  a <- tryA
  b <- …
Run Code Online (Sandbox Code Playgroud)

scala exception try-catch

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

Scala对象扩展了Java类静态字段

我想知道Scala中Java类的固有静态字段怎么样.

这是一个Java示例,如果我是一个名为ClassFromJava的类,我可以扩展它,添加一些静态字段,并使用子类来访问VERSION字段.

public class ClassFromJava {
    public static int VERSION = 1;
}

public class ClassFromJavaSub extends ClassFromJava {
    public static String NOTE = "A note";
}

public class Test {
    public static void main (String [] args) {
       System.out.println (ClassFromJavaSub.VERSION); // This works.
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想在Scala中扩展ClassFromJava,并添加一些常量值,它似乎不起作用.

object ClassFromScala extends ClassFromJava {
    val NOTE = "A Note"
}

object Test {
    def main (args: Array[String]) {
        // This line won't compile
        // ClassFromScala has no value VERSION.
        println (ClassFromScala.VERSION) 
    } …
Run Code Online (Sandbox Code Playgroud)

java scala

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

在sbt 0.11中的自定义任务中获取项目的源文件

我用SBT 0.11.

build.sbt在sbt项目中有以下文件:

myAction := {
  // val srcFiles = ?
  // How can I make srcFiles a List[File] of all sources files?
  println("This is my action")
}
Run Code Online (Sandbox Code Playgroud)

它工作正常,但我怎么能访问所有Java/Scala源文件路径的设置,例如src/main/scala/*.scala目标类目录,例如target/scala-2.9.1/class?

scala sbt

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

带有HAL库的STM32F4-Discovery(STM32F429ZIT6)上的RS232(UART)?

背景

这是我的一些背景知识,这样你的家伙就可以知道我拥有或者没有相关知识.我完全是这种嵌入式系统的新手.我对电子产品一无所知,我是一个纯粹的软件人.

我唯一的嵌入式系统体验是Raspberry Pi,它与STM32F4 Discovery完全不同.

我可以使用Raspberry Pi上的标准Linux C库实现UART读/写编程,该库连接到带有USB转RS232适配器和电压转换器IC的PC.

我的设备和开发环境

  • 带STM32F429ZIT6 MCU的STM32F429I-DISCO板
  • USB-to-RS232电缆和电压转换器IC,在Raspberry Pi上运行良好.
  • Keil uVision 5 IDE.

我想要实现的目标

我想在STM32F429 Discovery板上实现一个可以向/从PC发送/接收消息的编程.(例如,将字符串发送到PC.当从PC接收到字符串时,点亮板上的LED)

我现在做了什么

现在我已经设置了我的Keil uVision IDE,并且可以编译/运行闪烁LED示例,我也可以编辑该示例以按照我希望的方式控制LED.(例如,按下用户按钮时打开LED,按下按钮时将其关闭)

所以LED部件已经完成了,它是如何使用RS232电缆与STM32F4 Discovery板进行通信的缺失部分.

我的问题

  1. 首先,我想知道我是否正确理解了该板的PIN定义.根据该数据表,我应该将DB9上的TX引脚连接到PD2(UART5_RX),将DB9上的RX引脚连接到PC12(UART5_TX),将DB9上的VCC引脚连接到3.3V,将DB9上的GND连接到GND.这个连接是否正确?

  2. 是否有关于如何在最新版本的Keil uVision上使用新HAL库的UART的示例代码?我在网上搜索过,但是大多数示例代码或教程都使用了一个函数RCC_AHB1PeriphClockCmd,这个函数似乎不存在于来自Keil uVision的新HAL库中.

更新

  1. 我的USB转串口适配器是067b:2303 Prolific Technology, Inc. PL2303 Serial Port一个电平转换器IC.看起来像这样:在此输入图像描述

  2. 当连接到Raspberry Pi时,我遵循了这条指令,因此IC上的VCC/GND连接到Raspberry Pi上的3.3V/GND,我不确定是否需要这样做.

  3. 通过"HAL"库,我的意思是这个stm32f4xx_hal_usart.c文件,根据评论中的许可声明,它似乎来自意法半导体.虽然这个文件中有一些指令,但我仍然很难弄清楚如何使用这个驱动程序.举例来说,我不能告诉之间的区别Enable USARTx interface clockEnable the clock for USART GPIOs,我不知道我怎样才能实现这些功能.因此,如果有一个示例代码,那将是一个很大的帮助,因为我可以将它与这些指令进行比较.

在此输入图像描述 在此输入图像描述

embedded serial-port uart stm32f4discovery

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