小编wuj*_*jek的帖子

Python 3中的包不需要__init__.py吗?

我使用的是Python 3.5.1.我在这里阅读了文档和包部分:https://docs.python.org/3/tutorial/modules.html#packages

现在,我有以下结构:

/home/wujek/Playground/a/b/module.py
Run Code Online (Sandbox Code Playgroud)

module.py:

class Foo:
    def __init__(self):
        print('initializing Foo')
Run Code Online (Sandbox Code Playgroud)

现在,在/home/wujek/Playground:

~/Playground $ python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x100a8f0b8>
Run Code Online (Sandbox Code Playgroud)

同样,现在在家里,超级文件夹Playground:

~ $ PYTHONPATH=Playground python3
>>> import a.b.module
>>> a.b.module.Foo()
initializing Foo
<a.b.module.Foo object at 0x10a5fee10>
Run Code Online (Sandbox Code Playgroud)

实际上,我可以做各种各样的事情:

~ $ PYTHONPATH=Playground python3
>>> import a
>>> import a.b
>>> import Playground.a.b
Run Code Online (Sandbox Code Playgroud)

为什么这样做?我虽然有被需要的__init__.py文件(空的都可以)两种a,并bmodule.py要导入的时候Python的路径指向Playground文件夹?

这似乎已经从Python 2.7改变了:

~ $ PYTHONPATH=Playground …
Run Code Online (Sandbox Code Playgroud)

python package python-3.x

146
推荐指数
5
解决办法
6万
查看次数

RecyclerView.ViewHolder - getLayoutPosition vs getAdapterPosition

由于新的支持库版本(22.x暂时)的getPosition()的方法RecyclerView.ViewHolder类已被否决代替的主题中提到的方法.我并没有真正理解阅读文档.有人可以解释外行人的条款差异吗?

我有以下用例 - 我给我的适配器a List,并且还希望能够为每个列表项关联额外信息.我有一个位置到额外的映射,并且映射可供持有者使用,以便他们可以获取额外的位置并用它做事.在持有人中,我应该使用哪种方法?

当指数0和1的列表项切换位置时,​​持有者位置会发生什么?这些方法返回了什么?

android android-recyclerview

79
推荐指数
1
解决办法
3万
查看次数

从闭包的实例属性访问self

我正在使用Xcode6-beta2,但自第一次公开测试版以来,我遇到了同样的问题.Obj-C UIViewController的My Swift子类如下所示:

class SomeVC: UIViewController {
    var c1: () -> () = {
        println(self)
    }

    var c2: () -> () {
        get {
            return { println(self) }
        }
    }

    var c3: () -> () {
        return { println(self) }
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        c1()
        c2()
        c3()
    }
}
Run Code Online (Sandbox Code Playgroud)

显示VC时,我看到打印出以下行:

(Function)
<_TtC12SwiftiOSTest6SomeVC: 0x10bf1ed10>
<_TtC12SwiftiOSTest6SomeVC: 0x10bf1ed10>
Run Code Online (Sandbox Code Playgroud)

(c2和c3的不同之处仅在于,如果计算属性只能获取,则不必包含get {...}.)

所以,第一个闭包的自我似乎是指函数/闭包类型本身,而其他的自我指的是视图控制器(正如我所料).c1和c2/c3之间的唯一区别是前者是存储属性,后者是计算属性,但我仍然期望闭包和它们捕获的值是相同的,即self总是引用封闭类.现在的方式,c1闭包似乎没有明显的方法来访问封闭类的方法/属性.

这是在某处记录的(我阅读了Swift书并没有找到任何内容),或者它只是某种类型的beta编译器错误,应该在某处提交?

swift

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

Bash检查变量是否为数组

我有一个变量名循环,我需要检查该名称指向的变量是否是一个数组.我试图谷歌,但没有找到任何东西.有帮助吗?

for varname in AA BB CC; do
  local val
  if [ "$varname" is array ]; then # how can I perform this test?
    echo do something with an array
  else
    echo do something with a "'normal'" variable
  fi
done
Run Code Online (Sandbox Code Playgroud)

arrays bash

30
推荐指数
4
解决办法
3万
查看次数

覆盖子类中的readonly属性

有一个类看起来像这样(我为了简洁省略了导入):

Base.h:

@interface Base : NSObject
@property (strong, readonly) NSString *something;
- (id)initWithSomething:(NSString *)something;
@end
Run Code Online (Sandbox Code Playgroud)

Base.m:

@implementation Base
- (id)initWithSomething:(NSString *)something {
    self = [super init];
    if (self) _something = something;
    return self;
}
@end
Run Code Online (Sandbox Code Playgroud)

如你所见,'something'属性是readonly.现在我想创建一个子类来覆盖该属性也是可写的:

Sub.h:

@interface Sub : Base
@property (strong) NSString *something;
@end
Run Code Online (Sandbox Code Playgroud)

Sub.m:

@implementation Sub
@end
Run Code Online (Sandbox Code Playgroud)

和代码:

main.c中:

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Sub *o = [Sub new];
        o.something = @"foo";
        NSLog(@"%@", o.something);
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

此代码导致:

    2013-09-07 13:58:36.970 ClilTest[3094:303] …
Run Code Online (Sandbox Code Playgroud)

properties objective-c

18
推荐指数
2
解决办法
2万
查看次数

Android设计库CoordinatorLayout,AppBarLayout和DrawerLayout

我在API 22上使用Android设计库.我想:

  1. 有一个Toolbar和一个DrawerLayout,里面有一个RecyclerView
  2. 让DrawerLayout低于工具栏; 例如,当工具栏可见时,抽屉的主要内容应位于其下方,(左)抽屉也应位于其下方,以便在展开时,工具栏仍然可见
  3. 滚动回收器视图时,将工具栏滚出屏幕

这甚至可能吗?我有嫁给#2和#3的问题.现在的方式是工具栏总是在抽屉布局上方,覆盖回收器中的第一个条目,以及左抽屉的顶部.这是我的布局文件(不完整,但显示我的结构):

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.widget.DrawerLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <TextView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"/>

    </android.support.v4.widget.DrawerLayout>

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Toolbar
            android:layout_width="match_parent"
            android:layout_height="?android:attr/actionBarSize"
            app:layout_scrollFlags="scroll|enterAlways"/>

    </android.support.design.widget.AppBarLayout>

</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)

看起来虽然RecyclerView的app:layout_behavior ="@ string/appbar_scrolling_view_behavior"设置没有效果,因为删除时,行为是相同的.

我尝试将RelativeLayout作为CoordinatorLayout的子项添加,以定义抽屉位于工具栏等下方,但似乎没有任何效果.

我正在努力实现库的可能性吗?

android android-design-library androiddesignsupport

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

将分组的可观测量的排放收集到一个列表中

我有以下用例(这当然是一个人为的例子,但是一旦我知道了答案,我就能将它移植到我要解决的真正问题):

  1. 获取整数列表.
  2. 按%4操作的结果对它们进行分组
  3. 将每个组的元素收集到列表中
  4. 忽略具有少于3个元素的元素的任何组/列表
  5. 发出一个列表,其元素是在步骤#3中创建的列表

这是我目前的代码:

    Observable
            .from(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12))
            .groupBy(item -> item % 4)
            .subscribe(groupedObservable -> {
                groupedObservable
                        .toList()
                        .filter(list -> list.size() > 2)
                        .subscribe(result -> {
                            System.out.printf("%d results %s%n", result.size(), result);
                        });
            });
Run Code Online (Sandbox Code Playgroud)

它的输出是:

4 results [0, 4, 8, 12]
3 results [2, 6, 10]
3 results [3, 7, 11]
Run Code Online (Sandbox Code Playgroud)

因此,它打印出每个组有多少元素,然后打印元素列表.我希望输出(我实际上不关心键):

3结果:[[0,4,8,12],[2,6,10],[3,7,11]]

即以某种方式将分组的可观察量展平为一个列表.我没有这样做.例如,.flatMap(integers -> Observable.just(integers))filter不改变任何内容之后添加,因为它只影响每个分组的可观察对象,而不是整个流.有没有办法满足我的要求?

rx-java

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

Android工具栏在横向模式下太高

我的min和target sdk是21,我没有使用支持库.

我正在使用新的工具栏小部件,通常它可以工作,我只是看起来有一个小故障.动作图标以纵向模式居中,而横向模式中的工具栏较高,图标不居中.请看一下截图(读取行只是为了让问题更加明显):

  • 肖像:

肖像模式

  • 景观:

景观模式

这可能看起来没什么,但是当选择动作时(如条形图左侧的"向上"箭头),结果是可以看到它下方几个像素的条带.我不喜欢它的样子.

活动本身不管理任何配置更改.

这是我的代码:

  • styles.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <style name="MyTheme" parent="android:Theme.Material.NoActionBar">
            <item name="android:toolbarStyle">@style/MyToolbarStyle</item>
        </style>
    
        <style name="MyToolbarStyle" parent="android:Widget.Toolbar">
            <item name="android:background">?android:attr/colorPrimary</item>
            <item name="android:elevation">2dp</item>
        </style>
    
    </resources>
    
    Run Code Online (Sandbox Code Playgroud)
  • XML用法:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    tools:context="com.test.TestActivity">
    
        <Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    
    </RelativeLayout>
    
    Run Code Online (Sandbox Code Playgroud)

我尝试使用android:minHeight属性,但是设置为30dp只是将图标向上移动,也是在纵向模式下.

我找到了这个:https://code.google.com/p/android/issues/detail ?id = 77874但是没有?attr/actionBarSize ...

如果可以解决这个问题怎么办呢?拍摄屏幕截图的手机是Nexus 6(xxxhdpi),图标来自谷歌图标包,最大的资源是xxhdpi.这是问题吗?

更新:当我使用?android:attr/actionBarSize时,上述链接的解决方法确实有效.但是,这是唯一的方法吗?看起来有点不对,需要这样的解决方法来处理像这样的新闪亮组件,甚至更多,以便解决方法需要一个组件的属性值替换为新组件.

android android-toolbar

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

通过滚动隐藏后以编程方式显示工具栏(Android设计库)

我有以下布局:抽屉,主内容视图有AppBarLayout,RecyclerView和TextView.滚动回收器时,工具栏被正确隐藏.

但是,我有一个用例:当删除回收器中的所有项目时,我将其可见性设置为"已消失",并将TextView设置为显示相应的消息.如果在隐藏工具栏时完成此操作,则用户无法再次看到工具栏.

是否可以以编程方式使工具栏完全显示?每当显示TextView而不是RecyclerView时,我都会这样做.

这是我的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:animateLayoutChanges="true">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?android:attr/actionBarSize"
                app:layout_scrollFlags="scroll|enterAlways"/>

        </android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/test_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

        <TextView
            android:id="@+id/empty_test_list_info_label"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:padding="@dimen/spacing_big"
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:visibility="gone"/>

    </android.support.design.widget.CoordinatorLayout>

    <RelativeLayout
        android:layout_width="280dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="?android:attr/windowBackground"
        android:elevation="10dp"/>

</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)

顺便说一句,出于某种原因,如果我将AppBarLayour放在RecyclerView之后,就像所有教程似乎都显示它一样,它会隐藏列表中最顶层的项目.它只在它上面时才能正常工作.

android android-design-library

10
推荐指数
2
解决办法
2058
查看次数

压缩可观察量的错误处理

我的用例是:我得到一个永久链接列表,并且需要每个永久链接发出两个REST请求以获取部分数据.当两个请求都回来时,我想将它们的信息合并在一起并对它做一些事情(这里 - 打印出来).我想用代码使用zip运算符来完成它.这是我当前的代码(以及我正在使用的库的模拟):

public class Main {

    public static void main(String[] args) {
        ContentManager cm = new ContentManager();

        Observable
                .from(cm.getPermalinks(10))
                .flatMap(permalink -> Observable.zip(
                        Observable.<Content>create(subscriber -> cm.getDataByPermalink(permalink, new SubscribingRestCallback(subscriber))),
                        Observable.<Content>create(subscriber -> cm.getStreamByPermalink(permalink, new SubscribingRestCallback(subscriber))),
                        (dataContent, streamUrlContent) -> {
                            if (dataContent == null || streamUrlContent == null) {
                                System.err.println("not zipping " + dataContent + " and " + streamUrlContent);
                                return Observable.empty();
                            }

                            return new Content(dataContent.permalink, dataContent.logoUrl, streamUrlContent.streamUrl);
                        }))
                .subscribe(System.out::println);
    }
}

class SubscribingRestCallback implements RestCallback {

    private final Subscriber<? super …
Run Code Online (Sandbox Code Playgroud)

rx-java

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