小编Zau*_*bov的帖子

C的遗产:按位运算符与等于运算符的优先级

我偶然发现了使用按位运算符的JavaScript情况.逻辑上,按位运算符应该具有比等于运算符更高的优先级,例如

if val & 10 == 10
   alert('flag set')
Run Code Online (Sandbox Code Playgroud)

但看起来这个代码会以另一种方式工作,因为在JavaScript中,按位运算符的优先级低于等式运算符(参见Mozilla的JS参考).上面的代码总是返回0任何有效的数值val,因为结果val & true0.因此,正确的方法是将括号放在按位表达式周围:

if (val & 10) == 10
   alert('flag set')
Run Code Online (Sandbox Code Playgroud)

我挖出了这个问题的历史,看起来这种行为来自于K&R的C时代,其中逻辑&&||运算符是按比例添加的.就C中的逻辑陈述而言:

if (x == 1 & y == 0) {
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)

有一个完美的感觉.但它在按位逻辑方面没有任何意义.

C++,Java,Objective-C,PHP,C#,最后Javascript也有同样的方式.Python,Ruby,Go反过来说.

您是否知道任何原因(除了来自C的遗产之外)使编程语言的设计者遵循C的优先规则?

javascript c bit-manipulation equality

9
推荐指数
0
解决办法
512
查看次数

在surfaceview和canvas上绘制Android

我有一个"简单"的问题.我试着在surfaceview上画画.布局XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:keepScreenOn="true"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/hello" />

    <SurfaceView
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/imagesurface"
        android:layout_height="fill_parent"
        android:layout_width="fill_parent"
        android:background="#00ff00">
    </SurfaceView>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

Activity是SurfaceHolder.Callback:

public class OpenCvonAndroidGTDforHOGActivity extends Activity implements SurfaceHolder.Callback{

    private SurfaceHolder _surfaceHolder;
    private SurfaceView _surfaceView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        _surfaceView = (SurfaceView)findViewById(R.id.imagesurface);
        _surfaceHolder = _surfaceView.getHolder();
        _surfaceHolder.addCallback(this);
        _surfaceView.setWillNotDraw(false);

    }

    protected void onDraw(Canvas canvas) {
        canvas.drawRGB(255, 0, 255);            
    }

    public void surfaceCreated(SurfaceHolder holder) {
        Canvas canvas = null;
        try …
Run Code Online (Sandbox Code Playgroud)

android drawing

8
推荐指数
3
解决办法
5万
查看次数

在加载巨大的initrd时显示启动图像

考虑一个带有以下约束的实时GNU/Linux发行版:所有软件都应该包含在一个initrd映像中(这导致它的大小),并且内核包含尽可能少的静态编译模块.

考虑所描述的发行版的启动过程:引导加载程序(例如grub或isolinux)加载内核,然后内核将initrd加载并提取到内存中.在提取期间(在旧计算机上花费20-30秒)屏幕上没有任何反应.

我想知道,在initrd提取过程中是否有现成的解决方案显示启动画面?如果没有,请您评论以下想法:

  1. 将一个例如600x480x8bit的图像静态编译到内核中,并在提取initrd时以某种方式将其刷新到帧缓冲区中.

  2. 这样做,但强制加载一个特定的视频驱动程序(例如VESA)并入侵其代码,而不是内核的帧缓冲区.

谢谢.

linux kernel splash-screen initrd

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

了解*nix图标的路径

有人可以解释一下,为什么很多程序都有这样的图标路径:/ usr/share/program/icons/hicolor/16x16/...

我不明白的是为什么高彩色,为什么16×16×16,32×32等.

是否有任何功能(例如在GTK中)从这种路径中自动获取正确的图标?

谢谢!

linux icons path

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

将hg书签转换为命名分支

从git迁移到mercurial(不是我的个人偏好:)我遇到了一个问题:hg convert将git分支转换为书签.有没有办法将书签转换为命名的hg分支?甚至是否需要,为什么?谢谢!

git mercurial branch

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

棘手的ClojureScript语法

任何人都可以帮助我理解,这段代码中发生了什么:

(defn- make-edit-mode-container [widget]
  (let [input-container (template/node [:input.editable-edit-mode {:type "text"}])
        ghandler (goog.events.KeyHandler. input-container)]
      (set! (. input-container -gEditableHandler) ghandler)
  ;; ...
  ;; ...
  input-container))
Run Code Online (Sandbox Code Playgroud)

据我所知,这里声明了一个私有函数,它接受一个widget参数.local-scope变量input-container是一个节点(实际上它是一个dommy.template节点),它是一个HTML <input type="text" class="editable-edit-mode">元素.

我无法理解的是(goog.events.KeyHandler. input-container)(例如,最后一点是做什么goog.events.Keyhandler).

因此,AFAIU (. input-container -gEditableHandler)是会员访问权限,但后来-gEditableHandler来自哪里,破折号意味着什么?

提前致谢.

clojure clojurescript

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

映射clojure地图

我一直在尝试用mapClojure中的作用,并想知道,什么是应用的最佳实践mapmap集合,因此:

(map #(pprint (str %1 " " %2)) {:hello 1 :world 2})
Run Code Online (Sandbox Code Playgroud)

输出(订单现在并不重要):

:hello 1
:world 2
Run Code Online (Sandbox Code Playgroud)

我的主意是:

(def my-map {:hello 1 :world 2})
(map #(pprint (str %1 " " %2)) (keys my-map) (vals my-map))
Run Code Online (Sandbox Code Playgroud)

但!我没有在文档中找到任何证据证明Clojure(或例如ClojureScript)保证序列keysvals序列是相互保留的.

另一个想法是:

(map #(pprint (str (first %1) " " (rest %1))) my-map)
Run Code Online (Sandbox Code Playgroud)

这不是那么好,因为它与普通%1%2.

我相信有更好的方法来做到这一点.如果你知道的话,请你分享一下吗?提前致谢!

collections clojure map

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

Python实践:通过"引用"传递的参数

考虑一个类的实例:

class Car(object):
    def __init__(self):
        self.engine = None
Run Code Online (Sandbox Code Playgroud)

还有一个修改该实例的函数:

def add_engine(car):
    car.engine = 'V6'
Run Code Online (Sandbox Code Playgroud)

Python没有隐含的技术指出将修改参数.我能想到的最好的解决方案是返回修改后的对象(即使它将作为参数传递给同一个对象):

def add_engine(car):
    car.engine = 'V6'
    return car
Run Code Online (Sandbox Code Playgroud)

你会如何解决这个设计问题?

-

伙计们,非常感谢你的回答.你的建议有助于清除我脑子里的烂摊子:)

python arguments

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

jQuery.getScript()行为

有人可以解释一下jQuery的getScript()功能吗?

考虑一个javascript文件test.js:

var tmp = 'a variable';
alert('here');
Run Code Online (Sandbox Code Playgroud)

test.js通过html <script>标签加载时,一切正常:tmp全局范围内的变量可用,并出现一个消息框.

我试图通过此代码获得类似的行为:

<script>
$(document).ready(function() {
    $.getScript("static/js/proto/test.js");

    setTimeout(function() { 
        // at this point tmp should be available 
        // in the global scope
        alert(tmp); 

    } , 2000); // 2 seconds timeout
}
</script>
Run Code Online (Sandbox Code Playgroud)

但浏览器的错误控制台报告"未定义的变量tmp"错误.我究竟做错了什么?谢谢.

javascript jquery json

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