关于点运算符,我有点困惑.我有以下代码(用于测试):
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)
但是该代码也会返回错误.
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 新手,我需要帮助理解代码试图做什么。我对最后一行感兴趣(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) 我们都知道 - > vs.使用c/c ++访问成员的速度差异,但我很难找到简单点运算符的实际成本的任何线索.
我想象它的结构地址+偏移量,也假设偏移量是所有前面成员的所有sizeof-s的总和.这(大致)是否正确?
然后比较 - >谁快得多?两次?
(看过一些asm,在这里,关于.访问是一条指令,我想有一些魔法)
另外,与局部变量相比,速度有多慢?
谢谢
编辑:
我猜,我没有正确地问它.
试图澄清事情:
通过" - > vs." 我的意思是"使用指针访问结构"vs"直接成员访问" - (链接).
然后我只是好奇:"好吧,那么点访问本身呢?它花费了很多钱." 所以我问了这个问题.
"点算子成本c/c ++"本身可能是荒谬/无意义/天真的问题,但它确实得到了我正在寻找的答案.现在不能说好些了.
谢谢
我现在正在学习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)
另一方面确实有效。
为什么我必须在排序时添加第二个点并在其周围添加括号?