我想在 mingwX64 Windows(可能还有其他平台)上执行一些基本的文件系统操作:打开、关闭、读取、重命名、获取元数据、列出目录中的文件。
我找到了一个承诺实现此功能的项目:KotlinxIO。然而,多年来并没有取得任何进展。
还有其他替代方案或解决方法吗?
如果我在kakoune 中猛拉一个词,我如何将它粘贴到另一个编辑器(例如 gedit)中?
我已阅读如何从(并复制到)系统剪贴板制作 vim 粘贴?因为 vim 非常相似,但 kakoune 没有任何*
寄存器。
我偶然发现了fold ((,) <$> sum <*> product)
带有类型签名的这段代码,:: (Foldable t, Num a) => t a -> (a, a)
我完全迷失了.
我知道它的作用,但我不知道怎么做.所以我试着把它分成几小块:
?: :t (<$>)
(<$>) :: Functor f => (a -> b) -> f a -> f b
?: :t (,)
(,) :: a -> b -> (a, b)
?: :t sum
sum :: (Foldable t, Num a) => t a -> a
Run Code Online (Sandbox Code Playgroud)
一切都很好,只是基本的东西.
?: :t (,) <$> sum
(,) <$> sum :: (Foldable t, Num a) => t a …
Run Code Online (Sandbox Code Playgroud) 今天我尝试通过monoid类型类减少函数列表,但是由于某种原因,结果函数期望它的参数是Monoid的一个实例.
GHCI告诉我,类型mconcat [id, id, id, id]
是Monoid a => a -> a
.但我希望它是a -> a
.
怎么了?
我在GHCI中收到此错误:
*** Exception: <stdin>: hGetLine: illegal operation (handle is semi-closed)
运行此代码后:
main = do
interact $ unlines . fmap proccess . take x . lines
readLn :: IO Int
Run Code Online (Sandbox Code Playgroud)
而且我很确定原因是什么take x
.有没有更好的方式来读取仅使用交流输入的X线或者是interact
只是一个单独的播放器?
GHC可以简化id = (\(a, b) -> (a, b)).(\(a, b) -> (a, b))
为id = \(a, b) -> (a, b)
?
更复杂的情况呢?
id (Just x) = Just x
id Nothing = Nothing
map f (Just x) = Just (f x)
map _ Nothing = Nothing
Run Code Online (Sandbox Code Playgroud)
GHC会简化id . map
为map
?
我试图使用普通的beta缩减,但看起来这些术语是不可简化的,因为讨厌的模式匹配.
因此,我很好奇GHC的优化技术是如何处理的.
我有一些数据,我想测试一下,存储它们的最佳方法是什么.我正在决定二进制,四进制,八进制和十六进制数据类型.
检查哪个是最好的唯一方法是在我的算法中使用它们,然后查看结果.
到目前为止我的实现看起来像这样:
{-# LANGUAGE DeriveAnyClass #-}
data Binary = O | I
deriving (Bounded, Enum, Eq, Ord, Show)
data Octal = OA | OB | OC | OD | OE | OF | OG | OH
deriving ( ... )
Run Code Online (Sandbox Code Playgroud)
但是我想要更多的通用构造函数data Binary = 0 | 1
.有可能吗?
我有一个图像表示为RGB像素的2D数组.
typedef struct {
char R;
char G;
char B;
} RGB;
Run Code Online (Sandbox Code Playgroud)
以及为该图像计算每个像素的新颜色的函数:
RGB new_color(RGB image[][], int r, int c){
RGB color;
color.R = image[r][c].R + image[r+1][c].R + image[r-1][c].R + image[r][c+1].R + image[r][c-1].R;
color.G = image[r][c].G + image[r+1][c].G + image[r-1][c].G + image[r][c+1].G + image[r][c-1].G;
color.B = image[r][c].B + image[r+1][c].B + image[r-1][c].B + image[r][c+1].B + image[r][c-1].B;
return color;
}
Run Code Online (Sandbox Code Playgroud)
是否可以删除new_color正文中的代码重复?换句话说,抽象出RGB数据结构的字段名称?
我希望能够为我的所有项目定义一个任务sbt.build
:
lazy val project1 = project.in(`.` / "project1)
...
lazy val project2 =
...
lazy val upload = taskKey[Unit]("upload a config file from project to server)
upload := {
val file = baseDirectory.value / "config.json"
...
}
Run Code Online (Sandbox Code Playgroud)
问题在于此定义仅在调用时有效sbt upload
,但我希望能够为每个子项目调用它:sbt project1/upload
和sbt project2/upload
。
有没有办法做到这一点,而无需使用inputKey
?
看来 的输入Context.eval
只能引用来自不同编译单元的值:
// project 1
object Z {
val foo = "WOOF"
def impl(c: Context)(x: c.Expr[String]) = {
val x1 = c.Expr[String](c.untypecheck(x.tree.duplicate))
println(s"compile-time value is: ${c.eval(x1)}")
x
}
def test(x: String) = macro impl
}
// project 2
object Y {
val foo = "GOOF"
val boo = Z.test(Z.foo)
}
println(Y.boo)
Run Code Online (Sandbox Code Playgroud)
打印出"WOOF"
,但如果我将 boo 替换为val boo = Z.test(Y.foo)
,则会出现以下编译错误:
Error:(32, 29) exception during macro expansion:
java.lang.ClassNotFoundException: Y$
at scala.reflect.internal.util.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:72)
...
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决这个问题吗?我知道用 quill.io 定义的查询可以引用同一范围的方法,但我无法找到他们用来允许它的技巧。
我试图执行的帮助下运行长度编码From
和Into
.我的想法是,我将只实施并免费from
获得into
实施.
extern crate regex;
use regex::Regex;
struct RLE(pub String);
impl<'a> From<&'a str> for RLE {
fn from(s: &str) -> Self {
let reg = Regex::new(r"(\d*)([\w\s])").unwrap();
let mut accum = String::new();
for c in reg.captures_iter(s) {
let n = c.get(1).unwrap().as_str().parse::<usize>().unwrap_or(1);
let c = c.get(2).unwrap().as_str();
accum.push_str(&c.repeat(n));
}
RLE(accum)
}
}
Run Code Online (Sandbox Code Playgroud)
解码("2ab3c")=>"aabccc"
pub fn decode(s: &str) -> String {
let RLE(string) = RLE::from(s);
string
}
Run Code Online (Sandbox Code Playgroud)
encode("aabccc")=>"2ab3c"
pub fn encode(s: &str) -> String {
let string: …
Run Code Online (Sandbox Code Playgroud)