我已经实现了这个简短的例子,试图演示一个简单的委托模式.我的问题是.这看起来像是我理解代表团吗?
class Handler:
def __init__(self, parent = None):
self.parent = parent
def Handle(self, event):
handler = 'Handle_' +event
if hasattr(self, handler):
func = getattr(self, handler)
func()
elif self.parent:
self.parent.Handle(event)
class Geo():
def __init__(self, h):
self.handler = h
def Handle(self, event):
func = getattr(self.handler, 'Handle')
func(event)
class Steve():
def __init__(self, h):
self.handler = h
def Handle(self, event):
func = getattr(self.handler, 'Handle')
func(event)
class Andy():
def Handle(self, event):
print 'Andy is handling %s' %(event)
if __name__ == '__main__':
a = Andy()
s …Run Code Online (Sandbox Code Playgroud) 本周末,我花了几分钟时间将一个算法打包在一个标题中(以度为单位)并返回一个String作为基本方向(我在我正在使用的安卓指南针应用程序中使用它).我最终得到的是:
private String headingToString(Float heading)
{
String strHeading = "?";
Hashtable<String, Float> cardinal = new Hashtable<String, Float>();
cardinal.put("North_1", new Float(0));
cardinal.put("Northeast", new Float(45));
cardinal.put("East", new Float(90));
cardinal.put("Southeast", new Float(135));
cardinal.put("South", new Float(180));
cardinal.put("Southwest", new Float(225));
cardinal.put("West", new Float(270));
cardinal.put("Northwest", new Float(315));
cardinal.put("North_2", new Float(360));
for (String key: cardinal.keySet())
{
Float value = cardinal.get(key);
if (Math.abs(heading - value) < 30)
{
strHeading = key;
if (key.contains("North_"))
{
strHeading = "North";
}
break;
}
}
return strHeading;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,这是最好的方法吗?虽然我还没有在网上搜索过例子,但它必须已经多次完成.还有其他人试过这个并找到了一个更整洁的解决方案吗?
编辑Reverand的Thilo's,shinjin和Chrstoffer的回复:
解决方案
public …Run Code Online (Sandbox Code Playgroud) 我正试图在红宝石中做一些讨论:
def add(a,b)
return a+b
end
plus = lambda {add}
curry_plus = plus.curry
plus_two = curry_plus[2] #Line 24
puts plus_two[3]
Run Code Online (Sandbox Code Playgroud)
我收到了错误
func_test.rb:24:in `[]': wrong number of arguments (1 for 0) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
来自func_test.rb:24:in''
但如果我这样做
plus = lambda {|a,b| a+ b}
Run Code Online (Sandbox Code Playgroud)
它似乎工作.但是在使用lambda分配后,通过打印加两种方式都返回相同类型的对象.我误解了什么?
我刚刚完成了来自Joe Armstrong博客的erlang websockets示例我仍然是erlang的新手所以我决定在python中编写一个简单的服务器,这将有助于教我webockets(并希望通过解释joe的代码来解释一些erlang) .我有两个问题:
1)我从页面收到的数据包括一个'ÿ'作为最后一个字符.这不会出现在erlang版本中,我无法解决它来自固定的地方 - 这是因为在utf-8和我编码的字符串没有解码它们
2)我似乎是从服务器发送数据(通过websocket) - 可以通过查看client.send()生成的字节数来确认.但页面上没有任何内容出现.修复了,我没有正确编码字符串
我把所有的代码放在这里.这是我的python版本,因为我错过了任何明显的东西
import threading
import socket
def start_server():
tick = 0
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 1234))
sock.listen(100)
while True:
print 'listening...'
csock, address = sock.accept()
tick+=1
print 'connection!'
handshake(csock, tick)
print 'handshaken'
while True:
interact(csock, tick)
tick+=1
def handshake(client, tick):
our_handshake = "HTTP/1.1 101 Web Socket Protocol Handshake\r\n"+"Upgrade: WebSocket\r\n"+"Connection: Upgrade\r\n"+"WebSocket-Origin: http://localhost:8888\r\n"+"WebSocket-Location: "+" ws://localhost:1234/websession\r\n\r\n"
shake = client.recv(255)
print shake
client.send(our_handshake)
def interact(client, tick):
data = …Run Code Online (Sandbox Code Playgroud) 我正在尝试从Haskell中的套接字读取一些字节.基本上我想做一些与此相当的事情:
client_socket.recv(255) #(Python)
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方式是什么?
在关于求和的维基百科页面上,它说Haskell中的等效操作是使用foldl.我的问题是:有没有理由说它用这个而不是总和?是一个比另一个更"纯粹",还是没有真正的区别?
我有以下布局xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<item android:id="@+id/descriptions_menu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:icon="@drawable/ic_menu_info_details"
android:title="Toggle Descriptions On/ Off" />
<item android:id="@+id/settings_menu"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:icon="@drawable/ic_menu_preferences"
android:title="Settings" />
Run Code Online (Sandbox Code Playgroud)
但我不断收到此错误:缺少必需的layout_width和layout_height属性
这是在第2,9,10行报道的.这看起来很奇怪.这是一个旧项目(> 5年),我正试图复活.
我正在尝试编写我的第一个iPhone应用程序,并且我正在使用日期选择器对象为用户输入他们的出生日期.我的应用程序的一部分需要int格式的年份.我添加了如下代码.奇怪的是'月'得到了正确的价值.但是日和年似乎停留在MAX_INT(2147483647).谁能告诉我我做错了什么?
-(IBAction)dateOfBirthChanged:(id)sender {
NSCalendar* calender = [NSCalendar currentCalendar];
NSDateComponents* dateComponents = [calender components:NSMonthCalendarUnit fromDate:[datepicker date]];
NSInteger day = [dateComponents day];
NSInteger month = [dateComponents month];
NSInteger year = [dateComponents year];
label.text = [NSString stringWithFormat:@"Your year of birth is %d", year];
}
Run Code Online (Sandbox Code Playgroud) 我今天早上开始尝试找出erlang中使用'when'语句的内容.我知道下面的例子是错误的:
do_larger() ->
io:format("Larger~n").
do_smaller() ->
io:format("Smaller~n").
when_version(Size) ->
when Size > 10 -> do_larger(),
when Size < 10 -> do_smaller().
Run Code Online (Sandbox Code Playgroud)
我决定在Haskell中查看它的实现,看看这是否会有所帮助,最后我变得更加困惑.
是否有人能够指出我的教程(或向我解释)什么时候使用when语句以及它如何在haskell和/或erlang中使用?
我很惭愧地承认我不太了解比特和位操作,因为我可能应该这样做.我本周末尝试通过写一些"反转位数"和"计数ON位"功能来解决这个问题.我从这里做了一个例子但是当我按照下面的方式实现时,我发现我必须在<29时循环.如果我循环时<32(如示例中)那么当我尝试打印整数时(使用printBits函数)我写过)我似乎错过了前3位.这对我没有意义,有人可以帮助我吗?
感谢大家的帮助,我添加了评论以显示我所做的更改.
int reverse(int n)
{
int r = 0;
int i = 0;
for(i = 0; i < 29; i++) //Should be i < 32
{
r = (r << 1) + (n & 1); //| instead of + to make it obvious I'm handling bits
n >>=1;
}
return r;
}
Run Code Online (Sandbox Code Playgroud)
这是我的printBits函数:
void printBits(int n)
{
int mask = 0X10000000; //unsigned int mask = 0X80000000;
while (mask)
{
if (mask & n)
{
printf("1");
}
else …Run Code Online (Sandbox Code Playgroud) 我有一个简单的模块:
-module(dist).
-compile([add/3]).
add(From,X,Y) ->
From ! X+Y.
Run Code Online (Sandbox Code Playgroud)
我正在启动两个节点.
一个用
erl -sname foo
Run Code Online (Sandbox Code Playgroud)
和另一个
erl -sname bar
Run Code Online (Sandbox Code Playgroud)
在酒吧节点我正在做:
> c(dist).
{ok,dist}
> self().
<0.37.0>
> spawn('foo@unknown-00-23-6c-83-af-bd', dist, add, [self(), 3, 5]).
Run Code Online (Sandbox Code Playgroud)
但我得到的反应是:
Error in process <0.48.0> on node 'foo@unknown-00-23-6c-83-af-bd' with exit value: {undef,[{dist,add,[<8965.37.0>,3,5]}]}
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?我想知道这是否意味着我的foo节点没有定义这个模块?我不认为它需要它,但问题并没有通过编译foo节点中的dist来解决,所以我猜这不是问题.
我试图在同一个函数中找到一个简单的方法来汇总列表和列表列表,到目前为止我已经得到了:
import operator
"""
Fails late for item = ['a', 'b']
"""
def validate(item):
try:
return sum(item) == sum(range(1, 10))
except TypeError:
return sum(reduce(operator.add, item)) == sum(range(1, 10))
"""
Not valid for item = [1,2,[3,4,5]]
"""
def validate2(item):
if isinstance(item[0], int):
return sum(item) == sum(range(1, 10))
else:
return sum(reduce(operator.add, item)) == sum(range(1, 10))
print validate([1, 2, 3, 4, 5, 6, 7, 8, 9])
print validate([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print validate2([1, 2, 3, 4, 5, 6, …Run Code Online (Sandbox Code Playgroud) 我怎么能发现twoVal位于1?
$arr = array('Cool Viski' => array('oneVal' => '169304',
'twoVal' => '166678',
'threeVal' => '45134'));
Run Code Online (Sandbox Code Playgroud)