小编Ric*_* T.的帖子

如何手动确定以下功能的最常用类型?

目前我正在学习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)

lambda haskell types currying

2
推荐指数
1
解决办法
2201
查看次数

将类本身作为构造函数的唯一参数

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这个对象是(正如我们在工作中所说的)一个事务对象,每当我们需要传递一个实体类(它使用而不是实体类)时,它就会被初始化.

我也有一个默认的构造函数.

谢谢!

java

2
推荐指数
1
解决办法
1463
查看次数

使用“serde_yaml”反序列化多个文档

我在追加模式下将事件流保存在 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? …

yaml rust deserialization serde

2
推荐指数
1
解决办法
1061
查看次数

如何设置约束或验证/条件验证(对类型变量)?这里:如何强制半径> 0?

如果必须设置约束,则创建的任何圆的半径必须大于零(半径> 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)

如果方便,请提供更多示例,说明如何在各种情况下设置约束/验证.例如,数据电话可以具有正则表达式或特定的起始编号集(区号或国家代码等).

haskell types typeclass

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

如何检查 tdom(tcl) 中是否存在 xml 节点?

我正在尝试使用 tclsh 脚本中的 TDOM 解析器删除现有的 xml 节点。当尝试删除不存在的节点时,tcl 代码抛出错误。

在 tdom 中访问节点之前有什么方法可以检查该节点是否存在。

这是我尝试删除 delNode 时得到的结果:

invalid command name ""
    while executing
"[$root selectNodes $xpath/delNode] delete"
Run Code Online (Sandbox Code Playgroud)

xml tcl tdom

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

访问超类字段

例如,我有抽象类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 …

java inheritance

-1
推荐指数
2
解决办法
707
查看次数

标签 统计

haskell ×2

java ×2

types ×2

currying ×1

deserialization ×1

inheritance ×1

lambda ×1

rust ×1

serde ×1

tcl ×1

tdom ×1

typeclass ×1

xml ×1

yaml ×1