我正在尝试使用Io语言的运算符.在cli中一切正常,但是一旦我将代码放入文件中,我就会遇到问题.
这是一个很小的例子(创建一个与+相同的运算符+++)
OperatorTable addOperator("+++", 3) # Say that +++ should be an operator
Number +++ := method(v, call target + v) # Define the slot +++ on numbers
(30 +++ 40) println # Try it out!
Run Code Online (Sandbox Code Playgroud)
如上所述,这在cli中工作正常,但是当我尝试在文件中运行它时不起作用.我认为它与文件已经预先确定的事实有关,在定义运算符之前,但我将如何解决这个问题呢?
在Io编程语言中,是否有与lisp的apply函数等价的东西.
所以例如我有一个包裹writeln的方法:
mymeth := method(
//do some extra stuff
writeln(call message arguments))
)
Run Code Online (Sandbox Code Playgroud)
目前这只是打印列表,并没有评估它的内容,就像它们是它自己的args一样.
我试图用Io语言通过HTTPS获取文件:
url := URL with("https://api.example.com")
url fetch println
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
Error_0x7f97e1509a80:
location = "/opt/local/lib/io/addons/Socket/io/URL.io:232"
message = "Protocol 'https' unsupported"
Run Code Online (Sandbox Code Playgroud)
我试图在网上找到一些东西,但是,正如大家所知,由于这个名字,这并不容易.我只找到了这个帖子http://tech.groups.yahoo.com/group/iolanguage/message/10898,但那已经很老了.
如何在Io中获得HTTPS支持?
编辑
我发现在Io的源代码中有一个SecureSocket插件,一个OpenSSL封装器.但是,当我sudo port io install使用Mountain Lion在我的MacBook上安装时,它没有安装.我尝试从源代码构建它,但没有运气.它也没有在Linux机器上为我构建.
EDIT2
我只是尝试从source(git clone https://github.com/stevedekorte/io.git)再次构建Io (使用包含的脚本build.sh),结果发现cmake确实检测到了OpenSSL:
-- Found OpenSSL: /usr/lib/libssl.dylib;/usr/lib/libcrypto.dylib
Run Code Online (Sandbox Code Playgroud)
但是后来没有构建SecureSocket插件.它的自述文件:https://github.com/stevedekorte/io/tree/master/addons/SecureSocket说:
除非此文件中的修补程序应用于OpenSSL 0.9.8e,否则DTLS1绑定不可用.但是,此修补程序包括在d1_both.c中取消激活重新传输代码,使其不适用于生产环境.我不承担任何责任,等等.如果你想要使用它,应用补丁(从各种新闻组和我自己的实验中收集)并取消注释build.io的注释掉的块.对于它的价值,OpenSSL中的DTLS支持从0.9.8开始是新的,并且开始时是非常错误的.这是一个不错的主意,但它似乎还没有准备好生产.这些绑定也不例外.
我在Object上找到了serialized和justSerialized方法,并且已经成功将对象序列化为文件,但我找不到匹配的deserialize方法.
没有,或者我找到它太愚蠢了?
OperatorTable addAssignOperator(":", "myAssignMethod")
"foo" : "bar"
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误,即Sequence不响应":"(":"仍被视为消息,而不是操作符).
我认为它应该被评估myAssignMethod("foo", "bar")(自"foo" = "bar"成为updateSlot("foo", "bar")),但事实并非如此.然而:
OperatorTable addAssignOperator(":", "myAssignMethod")
doString("\"foo\" : \"bar\"")
Run Code Online (Sandbox Code Playgroud)
它可以正常工作,myAssignMethod并被调用.那么如何doString()在文件主代码中工作期间获得代码上发生的任何处理?
我不太确定Io中的变量范围是如何工作的.该文件说有倒闭,但我似乎并没有能够看到idx来自内部next和prev方法.父级可见性是关闭的关键前提,那么它们如何工作?
List iterator := method(
idx := 0
itr := Object clone
itr next := method(
idx = idx + 1
return self at(idx)
)
itr prev := method(
idx = idx - 1
return self at(idx)
)
return itr
)
Run Code Online (Sandbox Code Playgroud)
应该如何实现?
我使用"getSlot(" 方法名称 ")来探索Core和Object的一些内容,以了解一些基本方法是如何实现的.我很好奇if方法是如何编写和尝试的
Io> Object getSlot("if")
==> Object_if()
Io> Object getSlot("Object_if()")
==> nil
Run Code Online (Sandbox Code Playgroud)
这些都没有提供信息.有没有一种方法,以反映/检查/打印此(和其他Object_ keywordishword()的话)?
我最近开始搞乱Io编程语言并认为它非常有趣且简单易学.但我也很讨厌文档和支持很少.通常我会来SO寻求帮助,但即使在这里,主题也很少.
我正在学习7周书中的7种语言,我喜欢,但在那里他主要讨论了Io的更深层用途.
我的问题可能非常简单但我无法在任何地方找到答案......您如何实际询问用户输入?我已经找到了传递设置字符串的方法,从文件中读取字符串,但我找不到一种方法来询问用户输入.
我现在正在做的是编写一个接受2个参数的函数:一个字符串和一个要在该字符串中查找的子字符串.该函数在字符串中查找子字符串并打印索引.我甚至不知道我是应该要求用户输入还是以另一种方式做这个...
我正试图在Io上获得一些键盘时间,但这令人沮丧:/
另外,有没有人知道任何对初学者友好的IRC频道?不一定只是Io,但总的来说?
多谢你们.
我在OSX中安装并运行了Io(语言)命令行界面,但现在我在启动时收到此错误:
Exception: while loading history file '/Users/andrew/.io_history', reason: No such file or directory
Run Code Online (Sandbox Code Playgroud)
任何人都知道如何解决它?我已经提出要求的文件(但我不知道该放什么.)谷歌搜索这个错误没有帮助(只需要爱Io的非谷歌能力...... :-))
我想实现一个方法dim(x,y),它将为矩阵(y rows,x cols)分配空格.
我希望通过将可选函数"填充"传递给它来使"dim(x,y)"更强大,然后'dim'将位于(x,y)的元素设置为填充(x,y)
我的代码如下:
List2D dim := method(x, y, z,
target := list()
filler := if(z == nil,
method(return nil),
z)
for(i, 1, y,
subTarget := list()
for(j, 1, x,
subTarget append( filler(i,j) ))
target append(subTarget) )
return target)
Run Code Online (Sandbox Code Playgroud)
当使用2个参数调用'dim'时,它运行良好,但是失败了
List2D dim(3,2, method(x,y, 10*x+y))
在线上引发了异常filler := if(z == nil
.例外说nil does not respond to '*'
我意识到当与nil比较时,'z'被不正常地激活了.
所以我想知道如何让我的'List2D昏暗'正常工作?
我正在完成第七章,即七周语言中的七种语言("香肠之王").我直接从书中复制了代码,但它没有用.
Io 20110905
Run Code Online (Sandbox Code Playgroud)
将新运算符添加到OperatorTable.
Io> OperatorTable addOperator("xor", 11)
==> OperatorTable_0x336040:
Operators
0 ? @ @@
1 **
2 % * /
3 + -
4 << >>
5 < <= > >=
6 != ==
7 &
8 ^
9 |
10 && and
11 or xor ||
12 ..
13 %= &= *= += -= /= <<= >>= ^= |=
14 return
Assign Operators
::= newSlot
:= setSlot
= updateSlot
To add a new operator: …Run Code Online (Sandbox Code Playgroud) iolanguage ×11
binding ×1
closures ×1
cmake ×1
openssl ×1
operators ×1
reflection ×1
scope ×1
ssl ×1
xor ×1