目前我正在学习Haskell.我们必须确定给定函数的最一般类型,但我还没有得到它.解释器如何确定函数的最一般类型,尤其是lambda表达式?什么是手动确定最常规类型的安全方法?
tx2 = (\x y z -> y.z.z)
tx2::a->(a->b)->(a->a)->b -- my guess
tx2 :: a -> (b -> c) -> (b -> b) -> b -> c -- interpreter solution
Run Code Online (Sandbox Code Playgroud)
如果第一个变量(a)应用于表达式z,则z必须将a作为输入参数,但它在(b-> b)中使用b.y消耗b并生成c,因此最终结果必须为c.但为什么b(作为中间结果?)包含在类型中?如果是这样,为什么它不是 - >(b - > c) - >(b - > b) - > b-> b - > c?
tm2 = (\i -> [sum,product]!!i)
tm2:: Int->[(Integer->Integer->Integer)]->(Integer->Integer->Integer) -- my guess
\i -> [sum,product] !! i :: Num a => Int -> [a] -> a -- interpreter with direct input
tm2 :: …Run Code Online (Sandbox Code Playgroud) public class Foo{
private String a;
private int b;
public Foo(Foo foo){
this.a = foo.a;
this.b = foo.b;
}
}
Run Code Online (Sandbox Code Playgroud)
嗨,大家好.
我在工作中做了一小部分这段代码.我的同事看到了这个并给了我"你不应该呼吸"的样子,然后出去约30分钟冷静下来.(我是一名新毕业生)
我一直试图找出我所犯的那个可耻的错误......它没有成功.
有人请详细解释为什么这是一个不好的做法(或愚蠢)?
我这样做的原因是该类有很多参数,我不想每次需要初始化这个对象时都要传递3行参数(使用原始参数).
而且,FYI这个对象是(正如我们在工作中所说的)一个事务对象,每当我们需要传递一个实体类(它使用而不是实体类)时,它就会被初始化.
我也有一个默认的构造函数.
谢谢!
我在追加模式下将事件流保存在 YAML 日志文件中,其中每个事件都由一个单独的文档表示,如下所示:
---
type: event
id: 1
---
type: trigger
id: 2
Run Code Online (Sandbox Code Playgroud)
在稍后的某个时刻,我想迭代这些事件,解析每个 via serde_yaml。但据我了解,serde_yaml似乎不支持从单个阅读器解析多个文档,因为没有可用的方法提到它,并且尝试一次解析多个文档会导致错误MoreThanOneDocument。
use std::io::{self, BufRead};
use serde_yaml;
use serde::{self, Deserialize};
#[derive(Deserialize, Debug)]
#[serde(tag = "type", rename_all = "snake_case")]
pub enum Message {
Event { id: i32 },
Trigger { id: i32},
}
fn main() -> io::Result<()> {
let yaml = "---\ntype: event\nid: 1\n---\n\ntype: trigger\nid: 2";
let v: Message = serde_yaml::from_reader(yaml.as_bytes()).unwrap();
println!("{:?}", v);
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
我对 Rust 完全陌生,所以也许我完全错过了重点serde,只是不明白如何去做。
请问您如何解析这样的 YAML? …
如果必须设置约束,则创建的任何圆的半径必须大于零(半径> 0).怎么做?
data Point = Point Float Float deriving (Show)
data Radius = Radius Float deriving (Show)
data Shape = Circle Point Radius deriving (Show)
surface :: Shape -> Float
surface (Circle _ (Radius r)) = pi * r ^ 2
Run Code Online (Sandbox Code Playgroud)
如果方便,请提供更多示例,说明如何在各种情况下设置约束/验证.例如,数据电话可以具有正则表达式或特定的起始编号集(区号或国家代码等).
我正在尝试使用 tclsh 脚本中的 TDOM 解析器删除现有的 xml 节点。当尝试删除不存在的节点时,tcl 代码抛出错误。
在 tdom 中访问节点之前有什么方法可以检查该节点是否存在。
这是我尝试删除 delNode 时得到的结果:
invalid command name ""
while executing
"[$root selectNodes $xpath/delNode] delete"
Run Code Online (Sandbox Code Playgroud) 例如,我有抽象类Shape,它获取形状的坐标:
public abstract class Shape{
private int x;
private int y;
public Shape(int x, int y){
this.x=x;
this.y=y
}
public abstract void onDraw();
}
Run Code Online (Sandbox Code Playgroud)
现在我的课程Rect扩展自Shape:
public class Rect extends Shape{
private int height;
private int width;
public Rect(int height, int width){
this.height=height;
this.width=width;
}
@Override
public void onDraw(){
//this method should get the width and height and the coordinates x and y, and will print the shape rect
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:如何Shape从内部获取抽象类的坐标x和y Rect …