mirror of
https://github.com/EiffelSoftware/eiffel-org.git
synced 2025-12-07 07:12:25 +01:00
Merged 18.01 changes into trunk.
git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@2030 abb3cda0-5349-4a8f-a601-0c33ac3a8c38
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
[[Property:uuid|B74D374E-895C-4F22-B95F-656BD78ECD03]]
|
||||
[[Property:weight|1000]]
|
||||
[[Property:title|Getting a STRING from a NUMERIC object]]
|
||||
[[Property:link_title|NUMERIC to STRING]]
|
||||
Every class has the <code>out</code> method that can be used to get a text version of the object. For a lot of class, this method return internal informations that are not really useful for the end user. But for every <code>NUMERIC</code> class, the <code>out</code> method return a text representation of the number that the <code>NUMERIC</code> object represents.
|
||||
|
||||
<code>
|
||||
print_integer(a_integer:INTEGER)
|
||||
-- Print the value of `a_integer'
|
||||
do
|
||||
print(a_integer.out + "%N")
|
||||
end
|
||||
</code>
|
||||
|
||||
Note that for more advance convertion, you can also used convertion class like <code>FORMAT_DOUBLE</code>.
|
||||
@@ -0,0 +1,26 @@
|
||||
[[Property:uuid|78393BBA-9B1E-4523-9881-3D83CEB6A952]]
|
||||
[[Property:weight|3000]]
|
||||
[[Property:title|Removing object while iterating on a LIST]]
|
||||
If you already have the object that you want to remove from the <code>LIST</code> you can easily use <code>prune</code> and <code>prune_all</code>. But if you want to remove objects while iterating on that <code>LIST</code>, depending on criteria on the objects contained in the <code>LIST</code>, here what you can do.
|
||||
|
||||
First of all, if you think about removing object while iterating, I do not recommend using an <code>across</code> loop. If you iterate on the list using a <code>from until loop end</code>, just remember to use the <code>LIST.forth</code> only when you do not use <code>LIST.remove</code>.
|
||||
|
||||
For example, let's say we have class <code>MY_CLASS</code> with an attribute <code>has_stopped</code> and that I want to remove every object of a <code>LIST</code> that has this attribute set to <code>True</code>. Here what the code will look like.
|
||||
|
||||
<code>
|
||||
removing_stopped(a_list:LIST[MY_CLASS])
|
||||
-- Removing every closed element of `a_list'
|
||||
do
|
||||
from
|
||||
a_list.start
|
||||
until
|
||||
a_list.exhausted
|
||||
loop
|
||||
if a_list.item.has_stoped then
|
||||
a_list.remove
|
||||
else
|
||||
a_list.forth
|
||||
end
|
||||
end
|
||||
end
|
||||
</code>
|
||||
@@ -0,0 +1,35 @@
|
||||
[[Property:uuid|96077603-DD2D-4D8C-A486-AF4BD066613A]]
|
||||
[[Property:weight|2000]]
|
||||
[[Property:title|Iterating on a LIST]]
|
||||
There are two Eiffel mechanisms to iterate on every element of a <code>LIST</code>.
|
||||
|
||||
The first it the <code>across</code> loop. The <code>across</code> can be used on every <code>ITERABLE</code> object (including <code>LIST</code> objects).
|
||||
|
||||
<code>
|
||||
print_elements(a_list:LIST[INTEGER])
|
||||
-- Print every elements on `a_list'
|
||||
do
|
||||
across a_list as la_list loop
|
||||
print(la_list.item.out + "%N")
|
||||
end
|
||||
end
|
||||
</code>
|
||||
|
||||
Note that the temporary variable (<code>la_list</code> in the example) represent an iterator of the <code>ITERABLE</code> object, and not directly an element like in many other languages (like the <code>for</code> structure in Python for example).
|
||||
|
||||
The other mechanism uses the <code>from until</code> loop syntax. This syntax offer more possibilities than the <code>across</code> loop, but is riskier.
|
||||
|
||||
<code>
|
||||
print_elements(a_list:LIST[INTEGER])
|
||||
-- Print every elements on `a_list'
|
||||
do
|
||||
from
|
||||
a_list.start
|
||||
until
|
||||
a_list.exhausted
|
||||
loop
|
||||
print(a_list.item.out + "%N")
|
||||
a_list.forth
|
||||
end
|
||||
end
|
||||
</code>
|
||||
@@ -0,0 +1,50 @@
|
||||
[[Property:uuid|5CA34C5D-30F1-4D6F-9FE4-B555E541EA8C]]
|
||||
[[Property:weight|4000]]
|
||||
[[Property:title|Managing CTRL+C in console application]]
|
||||
Normally, if the user use the CTRL+C keys, the Eiffel application detect it as an error and throw an exception of type <code>OPERATING_SYSTEM_SIGNAL_FAILURE</code>.
|
||||
|
||||
To manage the CTRL+C keys, you can use a <code>rescue</code> clause to detect the exception and a <code>retry</code> mecanism to cancel the exception handeling done by the Eiffel runtime.
|
||||
|
||||
To detect the exception, you can <code>inherit</code> from the <code>EXCEPTIONS</code> class and use an attachment test on <code>Exception_manager.last_exception</code>.
|
||||
|
||||
<code>
|
||||
note
|
||||
description: "Show how to quit an application using CTRL+C (without trace)."
|
||||
author: "Louis Marchand"
|
||||
date: "Wed, 25 Apr 2018 23:12:33 +0000"
|
||||
revision: "0.1"
|
||||
|
||||
class
|
||||
APPLICATION
|
||||
|
||||
inherit
|
||||
EXCEPTIONS
|
||||
|
||||
create
|
||||
make
|
||||
|
||||
feature {NONE} -- Initialization
|
||||
|
||||
make
|
||||
-- Launch `Current'.
|
||||
local
|
||||
l_ctrl_c:BOOLEAN
|
||||
do
|
||||
if not l_ctrl_c then
|
||||
from until False loop
|
||||
io.standard_default.put_string ("Press CTRL+C%N")
|
||||
io.input.read_line
|
||||
end
|
||||
else
|
||||
io.standard_default.put_string ("%NClosing...%N")
|
||||
end
|
||||
rescue
|
||||
if attached {OPERATING_SYSTEM_SIGNAL_FAILURE}
|
||||
Exception_manager.last_exception then
|
||||
l_ctrl_c := True
|
||||
retry
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
</code>
|
||||
@@ -0,0 +1,7 @@
|
||||
[[Property:link_title|Mini How-tos]]
|
||||
[[Property:uuid|B2E4622A-2495-47DD-9C02-B9940A026EC1]]
|
||||
[[Property:weight|0]]
|
||||
[[Property:title|Mini How-tos]]
|
||||
In this section, you will find little how-tos that can be used to know how to used some very specific mechanics in Eiffel. Those how-tos are small by design and can be used to show very fundamental mechanisms for beginners or more advance mechanisms.
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ It is also possible to use the [[Set slice size command|set slice size command]]
|
||||
|
||||
|
||||
|
||||
'''The tool bar buttons:'''<br/>
|
||||
'''The toolbar buttons:'''<br/>
|
||||
* the [[Remove object command|remove object command]] [[Image:general-delete-icon]] <br/>
|
||||
* the [[Set slice size command|set slice size command]] [[Image:debugger-set-sizes-icon]] .<br/>
|
||||
* the button [[Image:debugger-expand-info-icon]] can give an [[Object Viewer (also known as Expanded display)|expanded display]] of the string relative to an object, by dropping the object onto the button (or pressing Ctrl+E on the selected value). Use it if an object has a very long string representation or a string representation that contains carriage returns, for example.<br/>
|
||||
@@ -29,7 +29,7 @@ It is also possible to use the [[Set slice size command|set slice size command]]
|
||||
* and the button [[Image:execution-object-storage-icon]] controls the [[Debuggee's Object Storage|remote object storage]] .
|
||||
|
||||
|
||||
{{tip|The tool's layout can be customized to have 2 side-by-side "left" and "right" grids holding the various information. This can be done using the button ( [[Image:toolbar-dropdown-icon]] ) from the tool bar which open the objects tool menu and then select "Edit Layout". Then you can use the tool layout editor as shown below to adjust which information you want displayed in each of the two sides. }}
|
||||
{{tip|The tool's layout can be customized to have 2 side-by-side "left" and "right" grids holding the various information. This can be done using the button ( [[Image:toolbar-dropdown-icon]] ) from the toolbar which open the objects tool menu and then select "Edit Layout". Then you can use the tool layout editor as shown below to adjust which information you want displayed in each of the two sides. }}
|
||||
|
||||
|
||||
[[Image:object-tool-layout-editor]]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[[Property:title|Set slice size command]]
|
||||
[[Property:weight|3]]
|
||||
[[Property:uuid|ce2469a3-cf00-554e-47bd-5e8b2fdbc783]]
|
||||
Located in the object tool toolbar, this command [[Image:debugger-set-sizes-icon]] changes the display size of special objects (i.e. objects whose class is [[ref:libraries/base/reference/special_chart|SPECIAL]] ). Because special objects may contain thousands of attributes, only the first fifty are displayed by default. If left-clicked, a dialog is popped up that sets the exploration indices of special objects that will be loaded in the future.
|
||||
Located in the object tool toolbar, this command [[Image:debugger-set-sizes-icon]] changes the display size of special objects (i.e. objects whose class is [[ref:libraries/base/reference/special_chart|SPECIAL]], most importantly in the representation of arrays and strings). Because special objects may contain thousands of attributes, only the first fifty are displayed by default. If left-clicked, a dialog is popped up that sets the exploration indices of special objects that will be loaded in the future.
|
||||
|
||||
This pop-up also shows the "Maximum displayed string size" in the grid ([[Object tool|object tool]], or the [[Expression evaluation|watch tools]]).
|
||||
|
||||
|
||||
@@ -56,28 +56,47 @@ cp -r /mnt/cdrom/EiffelXX .</code>
|
||||
|
||||
This will install the EiffelStudio files into /usr/local/EiffelXX. To complete the installation of EiffelStudio, jump to the next section, [[#Setting up EiffelStudio|Setting up EiffelStudio]].
|
||||
<span id="setting_up"></span>
|
||||
|
||||
==Setting up EiffelStudio==
|
||||
|
||||
Once the files have been installed, you should define the following environment variables in order to run EiffelStudio:
|
||||
* '''ISE_EIFFEL''' to /usr/local/EiffelXX
|
||||
* '''ISE_PLATFORM''' to linux-x86 for the 32 bits version or linux-x86-64 for the 64 bits version. We will be using '''linux-x86''' in the examples below.
|
||||
* '''ISE_PLATFORM''' to linux-x86 for the 32 bits version or linux-x86-64 for the 64 bits version. We will be using '''linux-x86-64''' in the examples below.
|
||||
and add $'''ISE_EIFFEL'''/studio/spec/$'''ISE_PLATFORM'''/bin to your '''PATH''' environment variable.
|
||||
|
||||
Using sh or bash as a shell, it suffices to type the following commands:
|
||||
<code>
|
||||
export ISE_EIFFEL=/usr/local/EiffelXX
|
||||
export ISE_PLATFORM=linux-x86
|
||||
export ISE_PLATFORM=linux-x86-64
|
||||
export PATH=$PATH:$ISE_EIFFEL/studio/spec/$ISE_PLATFORM/bin</code>
|
||||
|
||||
|
||||
Using csh or tcsh as a shell, it suffices to type the following commands:
|
||||
<code>
|
||||
setenv ISE_EIFFEL /usr/local/EiffelXX
|
||||
setenv ISE_PLATFORM linux-x86
|
||||
setenv ISE_PLATFORM linux-x86-64
|
||||
set path = ($path $ISE_EIFFEL/studio/spec/$ISE_PLATFORM/bin)</code>
|
||||
|
||||
|
||||
If you are using the Enterprise edition, please follow the instructions of the next section, [[#Registering the Enterprise Edition|Registering the Enterprise Edition]], otherwise jump to the [[#Using EiffelStudio|Using EiffelStudio]] section at the end of this document.
|
||||
|
||||
== Installing EiffelStudio on Ubuntu ==
|
||||
An alternative to previous solution for Ubuntu, is to use the ppa repository.
|
||||
```shell
|
||||
sudo add-apt-repository ppa:eiffelstudio-team/ppa
|
||||
sudo apt-get update
|
||||
sudo apt-get install eiffelstudio
|
||||
```
|
||||
It installs EiffelStudio using the linux layout, so no specific environment variables are needed (note: ISE_EIFFEL and ISE_PLATFORM should not be set to use this linux layout).
|
||||
The executable are located under `/usr/bin`, libraries under `/usr/lib/eiffelstudio`, ...
|
||||
|
||||
To reinstall, or update:
|
||||
```shell
|
||||
sudo apt-get purge eiffelstudio
|
||||
sudo apt-get update
|
||||
sudo apt-get install eiffelstudio
|
||||
```
|
||||
|
||||
<span id="registering"></span>
|
||||
==Registering the Enterprise Edition==
|
||||
|
||||
|
||||
Reference in New Issue
Block a user