我看了这个视频.为什么a = a评估nil是否a未定义?
a = a # => nil
b = c = q = c # => nil
Run Code Online (Sandbox Code Playgroud) 我正在学习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) 我们已经知道,当我们在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) 我正在尝试为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更好/更传统的选择?
这是问题,我有一个库有阻塞方法返回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)
这是我尝试过的,我只是.get在future {}块中使用方法,但我不确定这是否是最好的方法.
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) 我正在尝试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.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中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) 我用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?
背景
这是我的一些背景知识,这样你的家伙就可以知道我拥有或者没有相关知识.我完全是这种嵌入式系统的新手.我对电子产品一无所知,我是一个纯粹的软件人.
我唯一的嵌入式系统体验是Raspberry Pi,它与STM32F4 Discovery完全不同.
我可以使用Raspberry Pi上的标准Linux C库实现UART读/写编程,该库连接到带有USB转RS232适配器和电压转换器IC的PC.
我的设备和开发环境
我想要实现的目标
我想在STM32F429 Discovery板上实现一个可以向/从PC发送/接收消息的编程.(例如,将字符串发送到PC.当从PC接收到字符串时,点亮板上的LED)
我现在做了什么
现在我已经设置了我的Keil uVision IDE,并且可以编译/运行闪烁LED示例,我也可以编辑该示例以按照我希望的方式控制LED.(例如,按下用户按钮时打开LED,按下按钮时将其关闭)
所以LED部件已经完成了,它是如何使用RS232电缆与STM32F4 Discovery板进行通信的缺失部分.
我的问题
首先,我想知道我是否正确理解了该板的PIN定义.根据该数据表,我应该将DB9上的TX引脚连接到PD2(UART5_RX),将DB9上的RX引脚连接到PC12(UART5_TX),将DB9上的VCC引脚连接到3.3V,将DB9上的GND连接到GND.这个连接是否正确?
是否有关于如何在最新版本的Keil uVision上使用新HAL库的UART的示例代码?我在网上搜索过,但是大多数示例代码或教程都使用了一个函数RCC_AHB1PeriphClockCmd,这个函数似乎不存在于来自Keil uVision的新HAL库中.
更新
我的USB转串口适配器是067b:2303 Prolific Technology, Inc. PL2303 Serial Port一个电平转换器IC.看起来像这样:
当连接到Raspberry Pi时,我遵循了这条指令,因此IC上的VCC/GND连接到Raspberry Pi上的3.3V/GND,我不确定是否需要这样做.
通过"HAL"库,我的意思是这个stm32f4xx_hal_usart.c文件,根据评论中的许可声明,它似乎来自意法半导体.虽然这个文件中有一些指令,但我仍然很难弄清楚如何使用这个驱动程序.举例来说,我不能告诉之间的区别Enable USARTx interface clock和Enable the clock for USART GPIOs,我不知道我怎样才能实现这些功能.因此,如果有一个示例代码,那将是一个很大的帮助,因为我可以将它与这些指令进行比较.
scala ×6
java ×2
callstack ×1
coding-style ×1
embedded ×1
enums ×1
exception ×1
haskell ×1
ruby ×1
sbt ×1
scalaquery ×1
serial-port ×1
this ×1
try-catch ×1
uart ×1