请注意,我不是在谈论符号名称中的耳罩,这是在Clowjure常量的约定,样式和用法中讨论的问题?而如何在Clojure中使用的`*变种名称*`命名,约定?.我正在严格地谈论有一些名为foo的函数然后调用函数foo*的实例.
看起来每个人都涵盖了基本情况,例如选择某些列并通过谓词过滤得很好,但我想知道每种情况如何比较更高级的情况.是否更容易在一个方面表达复杂的查询?一个库是否缺少对方涵盖的任何功能?
我们定义一个函数foo:
def foo(s)
case s
when'foo'
x = 3
puts x.inspect
when 'bar'
y = 4
puts y.inspect
end
puts x.inspect
puts y.inspect
end
Run Code Online (Sandbox Code Playgroud)
然后我们将其称为如下:
1.9.3p194 :017 > foo('foo')
in foo scope
3
in outer scope
3
nil
=> nil
1.9.3p194 :018 > foo('bar')
in bar scope
3
in outer scope
nil
3
=> nil
Run Code Online (Sandbox Code Playgroud)
为什么函数不会在任何一种情况下抛出关于未注册的局部变量的错误?在第一种情况下,变量y似乎不应该存在,所以你不能inspect在外部范围内调用它; 同为x在第二种情况下.
这是另一个类似的例子:
def test1
x = 5 if false
puts x.inspect
end
def test2
puts x.inspect
end
Run Code Online (Sandbox Code Playgroud)
然后: …