Ruby中的块是什么意思?它与Smalltalk看起来类似,但您无法向其发送消息.
例如,在smalltalk中:
[:x | x + 3] value: 3
Run Code Online (Sandbox Code Playgroud)
返回6.但是在红宝石中:
{|x| x + 3}.call 3
Run Code Online (Sandbox Code Playgroud)
将导致SyntaxError.
好吧,你可以在ruby中将消息传递给lambda:
irb(main):025:0> ->(x){x+3}.call 3
=> 6
Run Code Online (Sandbox Code Playgroud)
所以在Ruby中,块不是一个块,但lambda是一个块?这是真的?我的意思是,红宝石lambda和smalltalk块之间有什么区别吗?如果这是真的,那么什么是红宝石块呢?
更新:
从下面的评论和答案,以及一些谷歌搜索,我想我对Ruby块有了更多的了解.在Ruby中,通常一段代码会计算一个值,而每个值都是一个对象.但是,块不会评估值.所以这不是一个对象.相反,它可以作为对象的一部分.例如,在{| x |中 x + 3}可以作为对象proc {| x |的一部分 x + 3}.
但它确实让我困惑.在smalltalk中,几乎每个表达式都可以分为对象(绑定到变量是例外).在Ruby中似乎有更多例外.
假设我们有一个名为的程序foo.
如果使用绝对路径:
setup(...,
data_files=[...,
('/etc', ['foo.cfg'])]
)
Run Code Online (Sandbox Code Playgroud)
然后foo$ python setup.py --prefix=/usr/local,我们将有/etc/foo.cfg.但/usr/local/etc/foo.cfg根据FHS,我们应该有.
如果我们使用相对路径怎么办?
setup(...,
data_files=[...,
('etc', ['foo.cfg'])]
)
Run Code Online (Sandbox Code Playgroud)
然后,如果我们使用默认安装路径,即安装到/ usr,我们将拥有/usr/etc/foo.cfg.再次运气不好.
那怎么做对了?
PS为避免使问题更复杂,我们假设此程序
foo无法在非unix环境下运行.
在lua中有类似python的virtualenv吗?
所以我可以在沙盒环境中安装所有必需的lua模块/岩石.这对测试很有用,因为我不会搞乱系统范围的lua模块或其他lua项目的环境.
自从支持自给式安装以来,luarocks看起来很有前景.但是我很感兴趣,如果有像virtualenv这样的工具可以自动创建,维护和切换沙盒环境.
我想创建一个可以在我的插件中使用的自定义实时模板.我知道如何使用"设置"对话框创建自定义实时模板,但我希望能够将实时模板作为插件的一部分进行分发:
谢谢.
在sh:
~$ `echo ls`
bin/ Desktop/
Run Code Online (Sandbox Code Playgroud)
但在鱼类:
fish: Illegal command name “(echo ls)”
~% (echo ls)
Run Code Online (Sandbox Code Playgroud)
(请注意,错误消息显示在命令行上方.)
~% echo (echo ls)
ls
~% eval (echo ls)
bin/ Desktop/
fish: Illegal command name “(echo ls)”
exec (echo ls)
^
~% exec (echo ls)
Run Code Online (Sandbox Code Playgroud)
看来命令替换只能作为命令的参数,而不是命令本身?为什么?
好吧,帮助文档确实说
如果参数包含一组括号,则括号括起的文本将被解释为命令列表.
但是,为什么呢?
这个命令
$ echo '??????????' | grep -oE '[?-?]'
Run Code Online (Sandbox Code Playgroud)
输出:
?
?
?
?
?
?
?
?
?
Run Code Online (Sandbox Code Playgroud)
正则表达式[?-?](一到十个)预计将匹配中国数字.如示例所示,除了中文字符?(四个)之外,它与从1到10的每个中文数字匹配.
为什么?
这是一个错误还是一个笑话?
我可能认为这是一个笑话,因为在中文'四'(四)听起来像'事'(事物).事实上,在一些中文方言中,它们共享相同的发音.因此'一二三五六七八十'(一二三五六七八九)暗示'没四'(没有四),即'没事'(没有东西).
BTW,我使用的grep版本:
GNU grep 2.5.4
Run Code Online (Sandbox Code Playgroud) 我正在使用google-diff-match-patch来比较自然语言中的纯文本。
如何使google-diff-match-patch忽略某些字符?(一些无关紧要的细微差别。)
例如,给定text1:
give me a cup of bean-milk. Thanks.
Run Code Online (Sandbox Code Playgroud)
和text2:
please give mom a cup of bean milk! Thank you.
Run Code Online (Sandbox Code Playgroud)
(请注意,在“谢谢”之前有两个空格字符。)
google-diff-match-patch输出如下所示:
[please] give m(e)[om] a cup of bean(-)[ ]milk(.)[!] Thank(s)[ you].
Run Code Online (Sandbox Code Playgroud)
看来google-diff-match-patch仅忽略不同数量的空格。
我怎样才能告诉google-diff-match-patch也忽略像这样的字符[-.!]?
预期结果将是
[please] give m(e)[om] a cup of bean-milk. Thank(s)[ you].
Run Code Online (Sandbox Code Playgroud)
谢谢。
ts-guide说:
除了
:形式之外,几乎所有球拍的绑定形式都有允许指定类型的对应形式。
但它没有说明何时使用哪一个。
并且ts-reference说form:是遗留的,为了向后兼容。
但是在ts-guide中,form:很多地方都用到了。
所以: v t比form:? 那么form呢?
例如:
; form:
(define: (id [z : Number]) : Number z)
; : v t + form
(: id (-> Number Number))
(define (id z) z)
; form (it seems recent versions of Racket add this?)
(define (id [z : Number]) : Number z)
Run Code Online (Sandbox Code Playgroud) 例如
// Not valid Kotlin code.
fun <T : Summable> myFunction ...
Run Code Online (Sandbox Code Playgroud)
T : Summable表示任何类型T支持+运算符,即.plus定义了一个方法.
例:
foo is a tool used to do foo.
Download_
.. _Download: http://example.com/foo
blah blah blah (omit a lot of paragraphs)
bar is another tool to do bar.
Download_
.. _Download: http://example.com/bar
Run Code Online (Sandbox Code Playgroud)
由于Download指向不同的URL,docutilus给出以下错误报告:
Duplicate target name, cannot be used as a
unique reference: "Download".
Run Code Online (Sandbox Code Playgroud)
在降价促销中,我可以为这两个指定不同的ID Download:
[Download][download-foo]
[download-foo]: http://example.com/foo
[Download][download-bar]
[download-bar]: http://example.com/bar
Run Code Online (Sandbox Code Playgroud)
如何在reStructuredText中做类似的事情?
输入Haskell绑定运算符的签名(>> =):
m a -> (a -> m b) -> m b
Run Code Online (Sandbox Code Playgroud)
输入F#的前向管道运算符(|>)的签名:
'a -> ('a -> 'b) -> 'b
Run Code Online (Sandbox Code Playgroud)
他们看起来很相似 考虑到F#的不纯性,|>Haskell中的等价运算符是>>=?
例如:
哈斯克尔:
getLine >>= putStrLn
Run Code Online (Sandbox Code Playgroud)
F#:
stdin.ReadLine() |> stdout.Write
Run Code Online (Sandbox Code Playgroud) 在Python中,除非循环中断,否则将执行else块:
for person in people:
if is_a_coder(person): break
# ... more code ...
else: # nobreak
print('There is no coder.')
Run Code Online (Sandbox Code Playgroud)
我怎么能在Ruby中做到这一点?
python ×3
ruby ×2
annotations ×1
bash ×1
bind ×1
break ×1
cjk ×1
command-line ×1
count ×1
diff ×1
distutils ×1
f# ×1
fhs ×1
fish ×1
grep ×1
haskell ×1
if-statement ×1
kotlin ×1
legacy ×1
list ×1
loops ×1
lua ×1
monads ×1
nlp ×1
pipeline ×1
racket ×1
regex ×1
shell ×1
smalltalk ×1
typed-racket ×1
virtualenv ×1