标签: dot-operator

Haskell:为什么f1.f2 xy不工作?

关于点运算符,我有点困惑.我有以下代码(用于测试):

test :: Int -> Int -> Int
test x y = f1 . f2 x y 
           where f1 n = n+1
                 f2 x' y' = x' * y'
Run Code Online (Sandbox Code Playgroud)

我认为它将首先执行(f2 xy),然后在该结果上执行f1,但它会抛出错误.谁能告诉我点运算符的确切定义以及等于f1的内容.f2 xy?(在没有点运算符的情况下编写)

最好的问候,Skyfe.

编辑:如果点运算符产生一个完整的新函数,我认为以下代码应该工作:

test :: Int -> Int -> Int
test x y = f1 . f2 x
           where f1 n = n+1
                 f2 x' y' = x' + y'
Run Code Online (Sandbox Code Playgroud)

但是该代码也会返回错误.

haskell function-composition dot-operator

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

为什么lambda表达式无法解除引用?

import java.util.*;

class TreeMapDemo
{
    public static void main(String args[])
    {
        Comparator <String> c1 = (str1, str2) -> 0;

        Comparator <String> c2 = (str1, str2) -> 1;

        TreeMap <String, Double> tm1 = new TreeMap(c1.thenComparing(c2));
        //Working fine

        TreeMap <String, Double> tm2 = new TreeMap(((str1, str2) -> 0).thenComparing((str1, str2) -> 1));
        //Error: Lambda expression not expected here
        //<none> can not be dereferenced
    }
}
Run Code Online (Sandbox Code Playgroud)

我的查询是:

如果

c1 = (str1, str2) -> 0而且c2 = (str1, str2) -> 1,

那么为什么

c1.thenComparing(c2) …

java lambda dereference dot-operator java-8

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

当我在 .set() 方法中有两个方法时它是如何工作的?

我是 Java 新手,我需要帮助理解代码试图做什么。我对最后一行感兴趣(sd.setId(sh.getGrade().getSchoolId());)。我知道它是在 sd 对象中使用 setId 设置的,但是我有点困惑(sh.getGrade().getSchoolId()) 的其余部分正在尝试做什么。是否先调用 getSchoolId() 方法,然后调用 sh.getGrade() 并在 sd 中设置所有内容?当一行代码中有多个点(.)运算符时,如何读取代码?

while (oneIter.hasNext()) {
 ShoolHistory sh= (ShoolHistory) oneIter.next();
 ScoolDetailId sd = new ScoolDetailId();
 sd.setId(sh.getGrade().getSchoolId());
Run Code Online (Sandbox Code Playgroud)

java dot-operator

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

点运算符成本c/c ++

我们都知道 - > vs.使用c/c ++访问成员的速度差异,但我很难找到简单点运算符的实际成本的任何线索.

我想象它的结构地址+偏移量,也假设偏移量是所有前面成员的所有sizeof-s的总和.这(大致)是否正确?

然后比较 - >谁快得多?两次?
(看过一些asm,在这里,关于.访问是一条指令,我想有一些魔法)

另外,与局部变量相比,速度有多慢?

谢谢

编辑:
我猜,我没有正确地问它.

试图澄清事情:
通过" - > vs." 我的意思是"使用指针访问结构"vs"直接成员访问" - (链接).
然后我只是好奇:"好吧,那么点访问本身呢?它花费了很多钱." 所以我问了这个问题.

"点算子成本c/c ++"本身可能是荒谬/无意义/天真的问题,但它确实得到了我正在寻找的答案.现在不能说好些了.

谢谢

c c++ dot-operator

0
推荐指数
2
解决办法
2025
查看次数

带排序和 (++) 的 Haskell 点运算符

我现在正在学习haskell,并试图找出前缀、中缀、优先级等的所有规则。

在尝试实现一个附加两个列表并对它们进行排序的函数时,我从以下开始:

appendAndSort :: [a] -> [a] -> [a]
appendAndSort = sort . (++)
Run Code Online (Sandbox Code Playgroud)

它不编译。

下列的:

appendAndSort :: Ord a => [a] -> [a] -> [a]
appendAndSort = (sort .) . (++)
Run Code Online (Sandbox Code Playgroud)

另一方面确实有效。

为什么我必须在排序时添加第二个点并在其周围添加括号?

haskell dot-operator

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