Tag: 语法

为什么这不是语法错误?

如果我这样做: (false true) 正如我所料,它因语法错误而失败。 但如果我这样做: (false true) 代码被执行,它抛弃第一个条件并返回第二个条件的结果。 这被视为错误还是function?

::和之间有区别吗? 在Ruby中调用类方法时?

简单的问题,但我一直很好奇的是……以下两个命令之间是否存在function差异? String::class String.class 他们都做我期望的 – 也就是说他们返回Class – 但使用::和之间的区别是什么. ? 我注意到在那些定义了常量的类中,IRB的自动完成将在您按::之后按Tab键时将常量作为可用选项返回. ,但我不知道这是什么原因……

以编程方式从字符串派生正则表达式

我想输入一个字符串并返回一个可用于描述字符串结构的正则表达式。 正则表达式将用于查找与第一个相同结构的更多字符串。 这是故意模棱两可的,因为我肯定会错过SO社区中的某个人会抓住的案例。 请发布任何和所有可能的方法来执行此操作。

为什么方法调用在原则上可以是常量时需要消除歧义?

方法调用通常可以省略接收器和参数的括号: def foo; “foo” end foo # => “foo” 在上面的例子中, foo在方法调用和对潜在局部变量的引用之间是不明确的。 在没有后者的情况下,它被解释为方法调用。 但是,当方法名称原则上可以是常量名称时(即,当它以大写字母开头,并且仅包含字母时),它似乎需要消除歧义。 def Foo; “Foo” end Foo # => NameError: uninitialized constant Foo Foo() # => “Foo” self.Foo # => “Foo” 为什么会这样? 为什么即使没有具有相同名称的常量,也需要将方法调用与对常量的引用明确区分开来?

简化Rails中的多个nil检查

我该怎么写: if @parent.child.grand_child.attribute.present? do_something 没有繁琐的零检查以避免exception: if @parent.child.present? && @parent.child.grandchild.present? && @parent.child.grandchild.attribute.present? 谢谢。

Ruby圆括号调用语法

我正在阅读jbuilder的README并看到这些代码: class Person # … Class Definition … # def to_builder Jbuilder.new do |person| person.(self, :name, :age) end end end 我试图自己复制它,它要求一个call方法,所以: class Thing attr_accessor :name, :age def call(*args) puts args.inspect end end Thing.new.(:name, :age) # => [:name, :age] 那么为什么jbuilder会出现一个self ?

语法推理库?

从一组被认为是由通用语法生成的示例中,用于常规或无上下文语法推理的最佳(或任何)开源库是什么? 我更喜欢Java,Python或Ruby中的好库,但当然乞丐不能选择。 我做了一些谷歌搜索,但找不到任何实际的实现,虽然我确实找到了很多有趣的参考。 这个库看起来很有趣,但我无法在任何地方找到它。 编辑(2011-11-14):为了清楚起见(虽然我不确定你们是怎么误解的),但问题是关于语法推理,而不是语法生成或解析。 换句话说,给定一组符合未知语法的字符串,找到它们都满足的最严格的语法。

在Ruby中,为什么在使用“do”和“end”时,方法调用不能被视为一个单元?

以下问题与“ Ruby Print Inject Do Syntax ”问题有关。 我的问题是,我们可以坚持使用do和end并使其与puts或p吗? 这有效: a = [1,2,3,4] b = a.inject do |sum, x| sum + x end puts b # prints out 10 所以,是正确的说, inject是Array对象的实例方法,这个实例方法接受一段代码,然后返回一个数字。 如果是这样,那么它应该与调用函数或方法并返回返回值没有什么不同: b = foo(3) puts b 要么 b = circle.getRadius() puts b 在以上两种情况下,我们可以直接说 puts foo(3) puts circle.getRadius() 因此,无法通过以下两种方式直接使其工作: a = [1,2,3,4] puts a.inject do |sum, […]

Ruby运算符方法调用与普通方法调用

我想知道为什么调用操作符方法不需要点? 或者更确切地说,为什么不能在没有点的情况下调用普通方法? 例 Foo级 def +(对象) 把“这会起作用” 结束 def plus(对象) 把“这不会” 结束 结束 f = Foo.new f +“任何事情”#“这会起作用” f加“任何”#NoMethodError:未定义的方法`plus’表示main:Object

为什么空格会影响ruby函数调用?

我在这段代码中遇到语法错误 render json: { “what” => “created”, “whatCreated” => “thing”, “htmlOutput” => render_to_string (partial: “some_partial”) } 但是使用这段代码我不会: render json: { “what” => “created”, “whatCreated” => “thing”, “htmlOutput” => render_to_string(partial: “some_partial”) } render_to_string之后如何破坏我的rails应用程序?