有方法isiterable
吗?到目前为止我找到的唯一解决方案是打电话
hasattr(myObj, '__iter__')
Run Code Online (Sandbox Code Playgroud)
但我不确定这是多么万无一失.
我想杀死我得到的所有进程:
ps aux | grep my_pattern
Run Code Online (Sandbox Code Playgroud)
怎么做?
这不起作用:
pkill my_pattern
Run Code Online (Sandbox Code Playgroud) 我经常使用该find
命令搜索源代码,删除文件等等.令人讨厌的是,因为Subversion在其.svn/text-base/
目录中存储了每个文件的重复项,所以我的简单搜索最终会得到大量重复的结果.例如,我想以递归方式搜索uint
多个messages.h
和messages.cpp
文件:
# find -name 'messages.*' -exec grep -Iw uint {} +
./messages.cpp: Log::verbose << "Discarding out of date message: id " << uint(olderMessage.id)
./messages.cpp: Log::verbose << "Added to send queue: " << *message << ": id " << uint(preparedMessage->id)
./messages.cpp: Log::error << "Received message with invalid SHA-1 hash: id " << uint(incomingMessage.id)
./messages.cpp: Log::verbose << "Received " << *message << ": id " << uint(incomingMessage.id)
./messages.cpp: Log::verbose << "Sent message: …
Run Code Online (Sandbox Code Playgroud) 之间有什么区别List
,List<?>
,List<T>
,List<E>
,和List<Object>
?
现在我不要盲目地问这个问题,所以请不要关闭这个帖子.我先介绍一下基本代码:
public static void test(List<?> list){
System.out.println(list); // Works
}
Run Code Online (Sandbox Code Playgroud)
我明白:
1 List
.:是原始类型,因此不是typesafe
.它只会在强制转换时生成运行时错误.当演员表不好时我们想要编译时错误.不建议使用.
2 . List<?>
:是一个无界的通配符.但不确定这是为了什么?所以如果我改变List<?>
方法
public static void test(List<?> list){
list.add(new Long(2)); // Error
list.add("2"); // Error
System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)
它仍然很好.如果您能解释一下这种用法,我将不胜感激.
编辑:如果我这样做:
public static void test(List<T> list){ // T cannot be resolved
System.out.println(list);
}
Run Code Online (Sandbox Code Playgroud)
但如果我改成List<?>
这个:
public <T> T[] toArray(T[] a){
return a;
}
Run Code Online (Sandbox Code Playgroud)
3 . <T>
:
public static …
Run Code Online (Sandbox Code Playgroud) 考虑这个课程:
class foo(object):
pass
Run Code Online (Sandbox Code Playgroud)
默认字符串表示形式如下所示:
>>> str(foo)
"<class '__main__.foo'>"
Run Code Online (Sandbox Code Playgroud)
如何将此显示设为自定义字符串?
我在Java 8中遇到了一个名为Functional Interface的新术语.
在使用lambda表达式时,我只能找到一个使用此接口的方法.
Java 8提供了一些内置的功能接口,如果我们想要定义任何功能接口,那么我们就可以使用@FunctionalInterface
注释.它允许我们在接口中只声明一个方法.
例如:
@FunctionalInterface
interface MathOperation {
int operation(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)
除了使用lambda表达式之外,它在Java 8中有多大用处?
这里的问题与我提出的问题不同.在使用Lambda表达式时,它询问为什么我们需要功能接口.我的问题是:为什么使用功能接口而不是直接使用lambda表达式?
我正在阅读linux内核,我发现了很多像这样的宏:
#define INIT_LIST_HEAD(ptr) do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
Run Code Online (Sandbox Code Playgroud)
为什么他们使用这个而不是简单地在{}中定义它?
对于类变量,向上铸造和向下铸造有什么区别?
例如,在下面的程序类中,Animal只包含一个方法但Dog类包含两个方法,那么我们如何将Dog变量转换为Animal变量.
如果完成了施法,那么我们如何使用Animal的变量调用Dog的另一种方法.
class Animal
{
public void callme()
{
System.out.println("In callme of Animal");
}
}
class Dog extends Animal
{
public void callme()
{
System.out.println("In callme of Dog");
}
public void callme2()
{
System.out.println("In callme2 of Dog");
}
}
public class UseAnimlas
{
public static void main (String [] args)
{
Dog d = new Dog();
Animal a = (Animal)d;
d.callme();
a.callme();
((Dog) a).callme2();
}
}
Run Code Online (Sandbox Code Playgroud) 我在脚本中这样做:
read direc <<< $(basename `pwd`)
Run Code Online (Sandbox Code Playgroud)
我得到:
Syntax error: redirection unexpected
Run Code Online (Sandbox Code Playgroud)
在ubuntu机器上
/bin/bash --version
GNU bash, version 4.0.33(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)
虽然我没有在另一台suse机器上得到这个错误:
/bin/bash --version
GNU bash, version 3.2.39(1)-release (x86_64-suse-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.
Run Code Online (Sandbox Code Playgroud)
为什么错误?
正如标题所解释的那样,我有一个非常基本的编程问题,我还没有能够理解.过滤掉所有(非常聪明)"为了理解递归,你必须首先理解递归." 各种在线线程的回复我仍然没有得到它.
理解当面对不知道我们不知道的事情时,我们可能倾向于提出错误的问题或者错误地提出正确的问题我会分享我"想"我的问题,希望有类似观点的人可以分享一些一点点知识,有助于我打开递归灯泡!
这是函数(语法用Swift编写):
func sumInts(a: Int, b: Int) -> Int {
if (a > b) {
return 0
} else {
return a + sumInts(a: a + 1, b: b)
}
}
Run Code Online (Sandbox Code Playgroud)
我们将使用2和5作为我们的论点:
println(sumInts(a: 2, b: 5))
Run Code Online (Sandbox Code Playgroud)
显然答案是14.但我不清楚这个价值是如何实现的.
这些是我的两个挂断:
递归调用该函数直到满足条件.那个条件是a> b.满足此条件时,返回0.乍一看,我希望返回值为0,这显然是不正确的.
在每次迭代中打印出'a'的值会产生一个我期望的值:2,3,4,5(此时5 + 1> b满足第一个条件:a> b)但我仍然不喜欢看看如何实现14的价值.
我的第一个想法是,类似于以下内容的东西神奇地发生:
var answer = a;
answer += a+1 until a > b;
return answer;
Run Code Online (Sandbox Code Playgroud)
所以排除了魔法,我只是没有得到什么.我很想知道发生的事情不仅仅是隐含的.
如果有人能够解释在这种功能中技术上发生了什么以及为什么结果不是0以及最终如何a + sumInts(a: a + 1, b: b) = 14
,我将永远负债累累.