我有一个多子模块python项目,例如"myproject",下面有两个子模块"submodule1"和"submodule2".
项目结构
Example1/
|-- submodule1/
| |-- __init__.py
| |-- hello.py
...
|-- submodule2/
| |-- __init__.py
...
Run Code Online (Sandbox Code Playgroud)
我有一个hello.py在submodule1其中有内容:
import datetime
def greeting():
print("hello world! - " + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)
submodule1's 的内容__init__.py是:
def main():
import hello
hello.greeting()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
我可以在这里成功导入hello.py和调用greeting()函数.
现在,我安装了submodule1一个包蟒蛇,然后创建submodule2,并试图调用submodule1内submodule2通过把下面的代码__init__.py下submodule2:
import submodule1
def main():
submodule1.main()
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
消息失败了:
....in main …Run Code Online (Sandbox Code Playgroud) 根据cats官方文档:https : //typelevel.org/cats-effect/typeclasses/liftio.html ,如果我们想把东西从IO提升到其他容器,你应该实现LiftIO trait,但示例明确运行unsafeRunXXX方法来获取出了效果,我想知道这是转型的唯一途径吗?
我有两个Future函数:
def parseIntFuture(str: String) = Future{scala.util.Try(str.toInt).toOption}
def divideFuture(a: Int, b: Int) = Future{ if (b == 0) None else Some(a / b)}
Run Code Online (Sandbox Code Playgroud)
现在我想连接它们并最终得到一个Future[Option[Int]]类型结果,这是第二个返回值,但如果我喜欢这样:
def stringDivideBy(aStr: String, bStr: String) = {
val x = for {
aNum <- parseIntFuture(aStr)
bNum <- parseIntFuture(bStr)
} yield (aNum, bNum)
x.map(n => {
for{
a <- n._1
b <- n._2
} yield divideFuture(a, b)
})
}
Run Code Online (Sandbox Code Playgroud)
实际上我会得到Future[Option[Future[Option[Int]]]]而Future[Option[Int]]不仅仅是.我知道这是因为我将一个Future传递给另一个,但我不知道连接这两个Futures的正确方法是逐一避免使用Await.我停止明确使用Await,那么解决方案是什么?
如何使用 shell 命令(sed 或 awk)来替换文件中的段落,如下所示:
bala bala ba1
balabala.
leave me here.
this paragraph
yes, I'm going
to be replaced
The rest contains
should not be replaced.
Run Code Online (Sandbox Code Playgroud)
更换后:
bala bala ba1
balaba.
leave me here.
New contains,
I'm replacement!
The rest contains
should not be replaced.
Run Code Online (Sandbox Code Playgroud)
我声明original包含在一个变量中$OLD,而new包含在另一个变量中$NEW。
我有以下代码应该是工厂类。它的apply方法具有用于返回类型限制的通用参数:
sealed trait Account
final case class CheckingAccount() extends Account
final case class SavingsAccount() extends Account
object Account {
def apply[T <: Account]:T = {
CheckingAccount() // CheckingAccount().asInstanceOf[T]
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果未显式进行类型转换,则编译器会报告“ Banking.CheckingAccount类型的表达式不符合预期的类型T”。有人知道为什么吗?
scala ×3
awk ×1
bash ×1
casting ×1
cats-effect ×1
future ×1
generics ×1
io-monad ×1
python ×1
python-3.x ×1
scala-cats ×1
sed ×1
types ×1